เปลี่ยนบุ้งผู้แต่งจากชื่อผู้ใช้เป็นชื่อเล่น


13

สวัสดีชุมชน
มีความเป็นไปได้ไหมที่จะเปลี่ยนชื่อผู้ใช้เริ่มต้นกระสุนเป็นชื่อเล่นหากมีหรือไม่

ตามค่าเริ่มต้น URL จะเป็นดังนี้: http: //domain.tld/author/ (ผู้ดูแลระบบ )
เป็นไปได้ที่จะเขียนใหม่และเปลี่ยนเป็นhttp: //domain.tld/author/ (ชื่อเล่น ) ดังนั้นหากผู้ใช้เปลี่ยนชื่อเล่นของเขา จากหน้าโปรไฟล์กระสุนมันจะเปลี่ยนเป็นชื่อใหม่ที่กำหนดโดยผู้ใช้?

ขอบคุณมาก!
ฟิลิป


ฉันไม่คิดว่าคุณสามารถทำได้จริงไม่มี query_var ที่จะค้นหาโพสต์ตามชื่อเล่นของผู้ใช้ดังนั้นจึงไม่มีตัวแปรที่เหมาะสมในการแมปชื่อเล่นกับในกฎการเขียนซ้ำ คุณต้องเพิ่มการจัดการการสืบค้นของคุณเองเพื่อจัดการกับการสอบถามชื่อเล่นข้างรหัสการเขียนใหม่ (เป็นไปได้ในทางทฤษฎี แต่ฉันไม่คิดว่ามันจะสง่างามในทางปฏิบัติ)
t31os

คำตอบ:


17

ฉันเห็นสองวิธีในการแก้ปัญหานี้: การเปลี่ยนข้อมูลที่เป็น URL ผู้แต่งหรือการเปลี่ยน URL ผู้เขียน คุณควรจัดการกับการเปลี่ยนเส้นทางด้วยดังนั้น URL เก่าไปยังที่เก็บถาวรของผู้ใช้จะยังคงใช้งานได้เมื่อผู้ใช้เปลี่ยนชื่อเล่น

การเปลี่ยน URL ผู้แต่ง

คำถามนี้มีสองส่วนคือจัดการลิงก์ที่เข้ามาด้วยชื่อเล่นผู้แต่งแทนที่จะเป็นบุ้งผู้สร้างและสร้าง URL โพสต์ของผู้แต่งด้วยชื่อเล่นแทนที่จะเป็นตัวบุ้งมาตรฐาน

ส่วนแรกได้รับการแก้ไขโดยการติดเข้าไปในrequestตัวกรองตรวจสอบว่ามันเป็นคำขอของผู้เขียนและค้นหาชื่อผู้แต่งโดยใช้ชื่อแทนกระสุน หากเราพบผู้แต่งเราจะเปลี่ยนพารามิเตอร์การสืบค้นเพื่อใช้ ID ผู้แต่ง

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 );
    }
}

ทางออกที่ดี ฉันยังไม่ได้ตรวจสอบ แต่ฉันคิดว่าวิธีการของคุณดีจริงๆ
Anh Tran

สิ่งที่เกี่ยวกับชื่อผู้แต่งซ้ำกัน? เราจำเป็นต้องกังวลเกี่ยวกับเรื่องนั้นหรือ WP จะดูแลมันหรือไม่?
Drew Baker

ดังที่ @DrewBaker กล่าวว่าอาจมีปัญหากับ URL ซ้ำซ้อนหากโปรไฟล์ผู้ใช้สองรายมีชื่อคล้ายกัน กล่าวว่าหากผู้ใช้ 1 แก้ไขชื่อผู้ใช้ของเขาเป็น John และมีผู้ใช้อื่นที่มีชื่อคล้ายกันโปรไฟล์ผู้ใช้ทั้งสองมี url ผู้แต่งคนเดียวเป็น site.com/author/john คุณช่วยบอกฉันได้ไหมว่ามีการแก้ไขในเรื่องนี้?
Netizen

นอกจากนี้หากมีช่องว่างระหว่างชื่อ URL จะไม่ทำงาน มันเกิดขึ้นกับชื่อผู้ใช้แบบสุ่มที่สร้างด้วยรหัสนี้ เมื่อฉันลองรหัสในตอนท้ายของฉันมันจะสร้างชื่อผู้ใช้แบบสุ่มเช่นผู้ใช้ใหม่ 654937 และ URL ผู้แต่งดูเหมือน site.com/author/Newuser654937/ URL นั้นจะไม่ทำงานจนกว่าเราจะเปลี่ยนชื่อโปรไฟล์อีกครั้งและลบช่องว่างออก มีคุณช่วยแนะนำวิธีแก้ปัญหาด้วยหรือไม่?
Netizen

@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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.