将作者子弹从用户名更改为昵称


13

社区大家好,
是否可以将默认的用户名slug更改为昵称(如果可用)?

默认情况下,URL类似于:http://domain.tld/author/(admin),
是否有可能重写并更改为http://domain.tld/author/(nickname),因此,如果用户更改了昵称,从配置文件页面中,它也会更改为用户指定的新名称吗?

非常感谢!
菲利普


我认为您实际上是不可能的,没有query_var可以根据用户的昵称查找帖子,因此没有适当的变量可以在重写规则中将昵称映射到。您必须添加自己的查询var处理,以与任何重写代码一起处理昵称查询(理论上是可能的,但我认为这在实践中不会很优雅)。
t31os 2010年

Answers:


17

我看到解决此问题的两种方法:更改构成作者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会照顾它?
德鲁·贝克

正如@DrewBaker所说,如果两个用户个人资料的名称相似,则网址重复可能会出现问题。假设某个用户1将其用户名编辑为John,而另一个用户的名称与此相似,则这两个用户配置文件的单一作者url为site.com/author/john。你能告诉我是否有解决办法?
网民

另外,如果名称之间存在空格,则该URL将不起作用。使用此代码创建的随机用户名会发生这种情况。当我在一端尝试代码时,它会生成随机的用户名,例如New user 654937,作者URL看起来像site.com/author/Newuser654937/。在我们再次更改配置文件名称并删除空格之前,该URL将不起作用。有没有可以建议的解决方案?
网民

@IamSJ:不能自动防止名称重复或字符无效。您将必须自己提供。如果通过第二种方法更改“ nicename”,则可能是最简单的方法。
Jan Fabry 2013年


-3

一个简单的方法是插件Author Slug

您也可以使用小代码:

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 2010年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.