उपयोगकर्ता नाम से लेखक स्लग को उपनाम में बदलें


13

समुदाय के लिए हाय,
क्या यह संभव है कि यदि उपलब्ध है तो डिफॉल्ट यूजरनेम स्लग को उपनाम में बदल दें?

डिफ़ॉल्ट रूप से url कुछ इस प्रकार है: http: //domain.tld/author/ (व्यवस्थापन ),
क्या यह फिर से लिखना और http: //domain.tld/author/ (उपनाम ) में बदलना संभव है , यदि कोई उपयोगकर्ता अपना उपनाम बदलता है प्रोफ़ाइल पृष्ठ के स्लग से यह उपयोगकर्ता द्वारा दिए गए नए नाम में भी बदल जाएगा?

आपका बहुत बहुत धन्यवाद!
फिलिप


मुझे नहीं लगता कि आप वास्तविक रूप से ऐसा कर सकते हैं, कोई भी क्वेरी_वर नहीं है जो उपयोगकर्ता के उपनाम के आधार पर पोस्ट ढूंढेगा, इसलिए उपनाम को फिर से लिखने के लिए कोई उपयुक्त चर नहीं होगा। आपको किसी भी रीराइट कोड के साथ उपनाम के प्रश्नों से निपटने के लिए अपनी स्वयं की क्वेरी var हैंडलिंग को जोड़ना होगा (यह सिद्धांत रूप में संभव है, लेकिन मुझे नहीं लगता कि यह अभ्यास में सुरुचिपूर्ण होगा)।
t31os

जवाबों:


17

मुझे इस समस्या को हल करने के दो तरीके दिखाई देते हैं: लेखक URL बनाने वाले डेटा को बदलना या लेखक URL बदलना। आपको शायद पुनर्निर्देश भी संभालना चाहिए, इसलिए उपयोगकर्ता अभिलेखागार में पुराने URL काम करते रहते हैं जब उपयोगकर्ता अपना उपनाम बदलता है।

लेखक URL बदलना

इस प्रश्न के दो भाग हैं: लेखक स्लग के बजाय लेखक उपनाम के साथ आने वाले लिंक को संभालें, और मानक स्लग के बजाय उपनाम के साथ लेखक पोस्ट यूआरएल उत्पन्न करें।

पहला भाग requestफ़िल्टर में हुक करके हल किया गया है , यह जाँच कर कि क्या यह एक लेखक का अनुरोध है, और स्लग के बजाय उपनाम द्वारा लेखक को देख रहा है। यदि हमें कोई लेखक मिलता है, तो हम लेखक आईडी का उपयोग करने के लिए क्वेरी पैरामीटर बदलते हैं।

add_filter( 'request', 'wpse5742_request' );
function wpse5742_request( $query_vars )
{
    if ( array_key_exists( 'author_name', $query_vars ) ) {
        global $wpdb;
        $author_id = $wpdb->get_var( $wpdb->prepare( "SELECT user_id FROM {$wpdb->usermeta} WHERE meta_key='nickname' AND meta_value = %s", $query_vars['author_name'] ) );
        if ( $author_id ) {
            $query_vars['author'] = $author_id;
            unset( $query_vars['author_name'] );    
        }
    }
    return $query_vars;
}

दूसरा भाग author_linkफिल्टर में हुक करके और $author_nicenameउपनाम के साथ मानक लेखक भाग (संकेत द्वारा ) को प्रतिस्थापित करके किया जाता है।

add_filter( 'author_link', 'wpse5742_author_link', 10, 3 );
function wpse5742_author_link( $link, $author_id, $author_nicename )
{
    $author_nickname = get_user_meta( $author_id, 'nickname', true );
    if ( $author_nickname ) {
        $link = str_replace( $author_nicename, $author_nickname, $link );
    }
    return $link;
}

लेखक URL बनाने वाले डेटा को बदलना

user_nicenameडेटाबेस में अन्यथा अप्रयुक्त फ़ील्ड को अपडेट करने का एक आसान तरीका होगा । मुझे लगता है कि यह उपयोगकर्ता लॉगिन से उत्पन्न होता है और उसके बाद कभी नहीं बदला जाता है। लेकिन मैं उपयोगकर्ता प्रबंधन का विशेषज्ञ नहीं हूं, इसलिए इसे अपने जोखिम पर उपयोग करें।

add_action( 'user_profile_update_errors', 'wpse5742_set_user_nicename_to_nickname', 10, 3 );
function wpse5742_set_user_nicename_to_nickname( &$errors, $update, &$user )
{
    if ( ! empty( $user->nickname ) ) {
        $user->user_nicename = sanitize_title( $user->nickname, $user->display_name );
    }
}

अच्छा समाधान है। मैंने अभी तक इसकी जाँच नहीं की है, लेकिन मुझे लगता है कि आपका दृष्टिकोण वास्तव में अच्छा है।
अन्ह ट्रॅन

डुप्लिकेट लेखक के उपनाम के बारे में क्या? क्या हमें इस बारे में चिंता करने की ज़रूरत है या क्या WP इसकी देखभाल करता है?
ड्रू बेकर

जैसा कि @DrewBaker ने कहा, डुप्लिकेट किए गए यूआरएल के साथ एक समस्या हो सकती है यदि दो उपयोगकर्ता प्रोफाइल में समान नाम हैं। यह कहें कि यदि उपयोगकर्ता 1 ने अपना उपयोगकर्ता नाम जॉन के रूप में संपादित किया है और समान नाम वाला कोई अन्य उपयोगकर्ता है, तो दोनों उपयोगकर्ता प्रोफाइल में साइट लेखक / साइट / अनाथ के रूप में एकल लेखक यूआरएल है। क्या आप मुझे बता सकते हैं कि क्या इसके लिए कोई फिक्स है?
नेटिजन डेस

इसके अलावा अगर नाम के बीच में जगह है, तो URL काम नहीं करेगा। यह इस कोड के साथ बनाए गए यादृच्छिक उपयोगकर्ता नामों के साथ होता है। जब मैंने अपने अंत में कोड की कोशिश की, तो यह नए उपयोगकर्ता 654937 जैसे यादृच्छिक उपयोगकर्ता नाम उत्पन्न करता है और लेखक URL site.com/author/Newuser654937/ जैसा दिखता है। वह URL तब तक काम नहीं करेगा जब तक हम फिर से प्रोफ़ाइल नाम नहीं बदलते और रिक्त स्थान नहीं निकालते। क्या आप इसके साथ कोई समाधान सुझा सकते हैं?
नेटिजन डेस

@IamSJ: डुप्लिकेट नामों, या अमान्य वर्णों के खिलाफ कोई स्वचालित रोकथाम नहीं है। आपको यह स्वयं प्रदान करना होगा। शायद सबसे आसान है यदि आप इसे दूसरे तरीके से करते हैं, तो "निकनेम" को बदलना।
Jan Fabry

1

इस प्लगइन का उपयोग करें: http://wordpress.org/extend/plugins/display-name-author-permalink/

हालांकि यह 3.2.1 के लिए परीक्षण नहीं किया गया है। मैं इसे बिना किसी समस्या के उपयोग कर रहा हूं।

यदि आप प्लगइन को सक्रिय करते समय हेडर त्रुटि प्राप्त करते हैं, तो आपको यहां एक फिक्स मिलेगा: http://wordpresscloaker.com/blog/how-to-fix-wordpress-plugin-does-not-have-a-valid-header -error.html


-3

एक आसान तरीका प्लगइन लेखक स्लग है

इसके अलावा आप छोटे कोड का उपयोग कर सकते हैं:

add_action('init', 'set_new_author_base');
function set_new_author_base() {
    global $wp_rewrite;
    $author_slug = 'new_slug';
    $wp_rewrite->author_base = $author_slug;
}

3
यह लेखक का आधार नहीं है जिसे उपयोगकर्ता दुर्भाग्य से बदलना चाहता है।
t31os
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.