龙笑天龙笑天  2017-05-27 16:27 龙笑天下 隐藏边栏 |   25 条评论  1,401 
文章评分 51 次,平均分 5.0
导语: 本文简要的介绍“隐藏管理员用户名”的一个方法,就是将作者存档链接中的用户名改为昵称或 ID~

将 WordPress 作者存档链接中的用户名改为昵称或 ID(修复中文昵称 404) wordpress

什么是作者存档页链接

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

// 未 url 重写
https://www.ilxtx.com/?author=1 

// 已 url 重写
https://www.ilxtx.com/author/admin

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

改为用户昵称

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

/**
* 将 WordPress 作者存档链接中的用户名改为用户昵称(完美版) - 龙笑天下
* https://www.ilxtx.com/use-user-nickname-or-id-for-author-slug.html
* 20170527:修复原 wordpress 大学版本的中文昵称 404 问题
*/
//使用昵称替换用户名,通过用户 ID 进行查询
add_filter( 'request', 'lxtx_wpdaxue_request' );
function lxtx_wpdaxue_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', 'lxtx_wpdaxue_author_link', 10, 3 );
function lxtx_wpdaxue_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;
}
Wordpress 大学旧版:中文昵称会 404

接着我们在个人资料中修改昵称为其他名称,比如,用户 demo 的昵称改为了 lxtx,这样一来,作者存档的链接就自动由 http://域名/author/demo 变成了 http://域名/author/lxtx

此外,记得将“公开显示为”设置为非用户名,这样就 OK 啦!

缺陷:当用户昵称为中文时,会出现 404,求高手修复~

在网上找了很久的修复这个中文昵称 404 问题,结果为 0,今天(20170527)在查另一个问题的时候,偶然看到了只言片语,结果一试,果然成功了~
在此非常感谢此文《WordPress 中文昵称问题解决方法小结》作者的思路及解决方法!

WordPress 用户存档链接中文昵称 404 问题的思路及解决方法来源

WordPress 用户存档链接中文昵称 404 问题的思路及解决方法来源

改为用户 ID

如果是用的上面这个方法,在多用户博客中,可能会存在昵称相同的情况,这时候只会显示 ID 较早的用户(最好的解决思路是修改个人资料时,如果使用了相同昵称,进行提示。但是不知具体如何实现,如果有朋友知道,希望告知!)。

在这里介绍另一种不会重复的方法,就是将 WordPress 作者存档链接中的用户名改为用户 ID。代码如下:

/**
 * 将 WordPress 作者存档链接中的用户名改为用户 ID - 龙笑天下
 * https://www.ilxtx.com/use-user-nickname-or-id-for-author-slug.html
 * 修改 url 重写后的作者存档页的链接变量
 * @since yundanran-3 beta 2
 * 2013 年 10 月 8 日 23:23:49
 */
add_filter( 'author_link', 'lxtx_yundanran_author_link', 10, 2 );
function lxtx_yundanran_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
 * @version 1.0
 * @since yundanran-3 beta 2
 * 2013 年 10 月 8 日 23:19:13
 * @link http://www.wpdaxue.com/use-nickname-for-author-slug.html
 */
add_filter( 'request', 'lxtx_yundanran_author_link_request' );
function lxtx_yundanran_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;
}

修改之后的效果见本站的作者存档链接~

友情提示:使用代码后,最好保存下固定链接,以免出现 404!

另:本文的方法并不能完全的隐藏掉管理员的登录用户名,进一步隐藏管理员用户名的方法详见下面这篇文章:

(全网独家)如何正确的避免你的 Wordpress 管理员登录用户名被暴露-BG
(全网独家)如何正确的避免你的 Wordpress 管理员登录用户名被暴露

(全网独家)如何正确的避免你的 Wordpress 管理员登录用户名被暴露

昨晚在研究评论结构时,网站右键查看源代码,无意间发现自己的管理员用户名被暴露了... 图 1 评论中暴露登录用户名 如上图,在博主的评论的 class 里看到的 test10 是我本地的测试网站的管理...

参考文章

将 WordPress 作者存档链接中的用户名改为昵称
将 WordPress 作者存档链接中的用户名改为用户 ID

「点点赞赏,手留余香」

还没有人赞赏,快来当第一个赞赏的人吧!

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

龙笑天
龙笑天 关注:32    粉丝:36 最后编辑于:2017-12-25
互助分享,互联网本该如此!

发表评论

表情 贴图 链接 私密 格式 签到
最赞评论
  1. 闲鱼
    闲鱼 评论达人 LV.1 来自天朝的朋友 QQ浏览器 Windows 7 湖南省长沙市 电信

    最讨厌你们这种会折腾的人,次次分享好东西,这不是逼着我跟着一起折腾吗 [憨笑]

  2. boke112导航
    boke112导航 评论达人 LV.3 来自天朝的朋友 谷歌浏览器 45.0.2454.101 Windows XP 广西南宁市 电信

    改为 ID 比较好,因为有些昵称是中文的,显示昵称在地址栏的话不太好。

  3. 龙笑天
    龙笑天 永久会员 博主 来自天朝的朋友 火狐浏览器 Windows 7

    @boke112导航其实我还是倾向于昵称的~ 现在的主机基本都支持中文链接了的;就有一点蛋疼,暂时还不会怎么避免昵称重复的问题~ 希望有人能解决! [可怜]

  1. 雨天
    雨天 来自天朝的朋友 搜狗浏览器 2.X Windows 7 浙江省杭州市 电信

    博主你好!请问下存档页链接改为 ID,输入 www.地址/author/admin 不会跳转到 404 是什么情况?我发现 admin 后面多了/显示的还是首页,不知道应该如何处理

    12楼 2019-06-21 23:50
    0 0 回复
  2. 小苍老师
    小苍老师 评论达人 LV.2 来自天朝的朋友 谷歌浏览器 55.0.2883.87 Windows 7 广东省佛山市 电信

    学些了,记住了!

    11楼 2018-04-17 07:50
    0 0 回复
  3. 易年天 来自天朝的朋友 谷歌浏览器 55.0.2883.87 Windows 10 重庆市 电信

    你好,请问为何添加了改为用户 ID 的代码后,在后台管理中点击所有用户,会发现原本有的用户列表一个都不显示?

    10楼 2018-04-16 19:45
    0 0 回复
  4. 月色
    月色 评论达人 LV.2 来自天朝的朋友 QQ浏览器 Windows 10 广东省东莞市 电信

    厉害厉害 已经成功用上啦 [呲牙]

    9楼 2018-03-04 14:04
    0 0 回复
  5. Koolight
    Koolight 评论达人 LV.3 来自天朝的朋友 谷歌浏览器 50.0.2661.102 Windows 7 浙江省绍兴市 电信IDC机房

    我还是默认的,没改。

    8楼 2017-06-27 22:44
    0 0 回复
  6. D
    daima 评论达人 LV.2 来自天朝的朋友 谷歌浏览器 50.0.2661.102 Windows 7 广东省深圳市 天威视讯

    很不错,试试去~

    7楼 2017-06-04 10:36
    0 0 回复
  7. 唯守
    唯守 来自天朝的朋友 谷歌浏览器 58.0.3029.110 Mac OS X 10_11_6 江苏省苏州市 电信

    签到成功!签到时间:2017-06-02 00:58:43,每日打卡,生活更精彩~

    6楼 2017-06-02 00:59
    0 0 回复
  8. 小萝博客
    小萝博客 评论达人 LV.1 来自天朝的朋友 谷歌浏览器 58.0.3029.110 Windows 10 广东省珠海市 电信

    又是一篇干货

    5楼 2017-05-31 19:59
    0 0 回复
  9. 香港高防服务器
    香港高防服务器 来自天朝的朋友 谷歌浏览器 45.0.2454.101 Windows 7 重庆市 电信

    好像大部分是用 ID 吧

    4楼 2017-05-31 17:15
    0 0 回复
  10. 闲鱼
    闲鱼 评论达人 LV.1 来自天朝的朋友 QQ浏览器 Windows 7 湖南省长沙市 电信

    最讨厌你们这种会折腾的人,次次分享好东西,这不是逼着我跟着一起折腾吗 [憨笑]

    地板 2017-05-29 21:53
    3 0 回复
  11. 橘子书
    橘子书 评论达人 LV.3 来自天朝的朋友 QQ浏览器 Windows 10 福建省漳州市 电信

    [鼓掌] 你对用户名研究情有独钟嘛。哈哈

    板凳 2017-05-29 10:43
    1 0 回复
    • 龙笑天
      龙笑天 永久会员 博主 来自天朝的朋友 火狐浏览器 Windows 7

      @橘子书没有哦,对用户资料啥的进行微调的时候发现了这个问题;一开始准备使用昵称作为链接的,但之前已经有近 300 人注册了,他们很大部分人的昵称为中文,且含有奇怪字符,做链接的话就不大好了,另外,昵称也可以经常换,这就导致 404 可能多了,所以用现在这种数字 ID 做链接了~
      PS:我去,你这突然“诈尸”了啊~

  12. boke112导航
    boke112导航 评论达人 LV.3 来自天朝的朋友 谷歌浏览器 45.0.2454.101 Windows XP 广西南宁市 电信

    改为 ID 比较好,因为有些昵称是中文的,显示昵称在地址栏的话不太好。

    沙发 2016-11-02 12:28
    3 0 回复
扫一扫二维码分享