問題描述
您好,社群,是否可以將預設使用者名稱 slug 更改為暱稱 (如果有)?
預設情況下,url 就像:http://domain.tld/author/(admin),是否可以重寫並更改為 http://domain.tld/author/(nickname),所以如果使用者從配置檔案頁面更改暱稱,那麼它將更改為使用者給出的新名稱?
非常感謝!菲利普
最佳解決方案
我看到兩種方法來解決這個問題:更改形成作者 URL 的資料,或者改變作者的 URL 。您可能也應該處理重定向,因此,當使用者更改暱稱時,使用者歸檔的舊網址會繼續工作。
更改作者網址
這個問題有兩個部分:處理與作者暱稱的傳入連結,而不是作者 slug,並使用暱稱而不是標準的 s and 生成作者釋出的網址。
第一部分是透過掛載到 request 過濾器中,檢查是否是作者請求,並透過暱稱而不是 slug 查詢作者。如果我們找到作者,我們更改查詢引數以使用作者 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;
}
更改形成作者網址的資料
更簡單的方法是更新資料庫中未使用的 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 );
}
}
參考文獻
注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。