将 WordPress 作者存档页链接中的用户名改为昵称或 ID(支持中文昵称)


作者存档页链接

wordpress 的里的所有注册用户都有一个专属的链接,称之为作者存档页链接,通常是这样的:

// 未url重写
https://www.yqlyz.com/?author=1
// 已url重写
https://www.yqlyz.com/author/admin

其中未 url 重写的参数值是用户 id,而 url 重写后的参数值是用户名。通常,我们都使用了 url 重写,也就是修改固定链接为非默认带?的样式,而这样就会导致作者存档页链接暴露了用户名,这样就直接暴露了登录 WordPress 的用户名,特别是管理员的用户名!存在安全隐患。一个不错的解决方法是将 WordPress 作者存档链接中的用户名改为昵称,方法如下。

改为用户昵称

在 functions.php 中加入以下代码:

//使用昵称替换用户名,通过用户ID进行查询
add_filter( 'request', 'yqlyz_request' );
function yqlyz_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", urldecode( $query_vars['author_name'] ) ) );
        if ( $author_id ) {
            $query_vars['author'] = $author_id;
            unset( $query_vars['author_name'] );
        }
    }
    return $query_vars;
}
//使用昵称替换链接中的用户名
add_filter( 'author_link', 'yqlyz_author_link', 10, 3 );
function yqlyz_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;
}
记得将“公开显示为”设置为非用户名。修改后的格式为 https://www.yqlyz.com/author/昵称

改为用户 ID

如果是用的上面这个方法,在多用户博客中,可能会存在昵称相同的情况,这时候只会显示 ID 较早的用户。
在这里介绍另一种不会重复的方法,就是将 WordPress 作者存档链接中的用户名改为用户 ID。代码如下:

add_filter( 'author_link', 'yqlyz_author_link', 10, 2 );
function yqlyz_author_link( $link, $author_id) {
    global $wp_rewrite;
    $author_id = (int) $author_id;
    $link = $wp_rewrite->get_author_permastruct();
    if ( empty($link) ) {
        $file = home_url( '/' );
        $link = $file . '?author=' . $author_id;
    } else {
        $link = str_replace('%author%', $author_id, $link);
        $link = home_url( user_trailingslashit( $link ) );
    }
    return $link;
}
/**
 * 替换作者的存档页的用户名,防止被其他用途
 * 作者存档页链接有2个查询变量,
 * 一个是author(作者用户id),用于未url重写
 * 另一个是author_name(作者用户名),用于url重写
 * 此处做的是,在url重写之后,把author_name替换为author
 */
add_filter( 'request', 'yqlyz_author_link_request' );
function yqlyz_author_link_request( $query_vars ) {
    if ( array_key_exists( 'author_name', $query_vars ) ) {
        global $wpdb;
        $author_id=$query_vars['author_name'];
        if ( $author_id ) {
            $query_vars['author'] = $author_id;
            unset( $query_vars['author_name'] );
        }
    }
    return $query_vars;
}
修改后的格式为 https://www.yqlyz.com/author/用户ID

<< 最详细的WordPress文章作者的相关函数调用代码 屏蔽WordPress网站中暴漏的登录用户名 >>
  • 作者 建站迷

    建站迷

    让天下没有难做的网站!
    解决中小型企业的无站之伤。



没有账号? 忘记密码?

社交账号快速登录