问题描述
您好,社区,是否可以将默认用户名 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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。