ฉันเห็นสองวิธีในการแก้ปัญหานี้: การเปลี่ยนข้อมูลที่เป็น 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 );
}
}