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

投稿  龙笑天下 2016-11-03 阅读 137 次 评论 30 条

什么是作者存档页链接?

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

  1. // 未url重写
  2. http://qianduanblog.com/?author=1 
  3. // 已url重写
  4. http://qianduanblog.com/author/admin

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

改为用户昵称

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

  1. /**
  2.  * 将WordPress作者存档链接中的用户名改为用户昵称 - 龙笑天下
  3.  * http://www.ilxtx.com/use-user-nickname-or-id-for-author-slug.html
  4.  * 将WordPress作者存档链接中的用户名改为昵称
  5.  * https://www.wpdaxue.com/use-nickname-for-author-slug.html
  6.  */
  7. //使用昵称替换用户名,通过用户ID进行查询
  8. add_filter( 'request', 'lxtx_wpdaxue_request' );
  9. function lxtx_wpdaxue_request( $query_vars )
  10. {
  11.     if ( array_key_exists( 'author_name', $query_vars ) ) {
  12.         global $wpdb;
  13.         $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'] ) );
  14.         if ( $author_id ) {
  15.             $query_vars['author'] = $author_id;
  16.             unset( $query_vars['author_name'] );
  17.         }
  18.     }
  19.     return $query_vars;
  20. }
  21. //使用昵称替换链接中的用户名
  22. add_filter( 'author_link', 'lxtx_wpdaxue_author_link', 10, 3 );
  23. function lxtx_wpdaxue_author_link( $link$author_id$author_nicename )
  24. {
  25.     $author_nickname = get_user_meta( $author_id, 'nickname', true );
  26.     if ( $author_nickname ) {
  27.         $link = str_replace$author_nicename$author_nickname$link );
  28.     }
  29.     return $link;
  30. }

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

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

改为用户ID

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

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

  1. /**
  2.  * 将WordPress作者存档链接中的用户名改为用户ID - 龙笑天下
  3.  * http://www.ilxtx.com/use-user-nickname-or-id-for-author-slug.html
  4.  * 修改url重写后的作者存档页的链接变量
  5.  * @since yundanran-3 beta 2
  6.  * 2013年10月8日23:23:49
  7.  */
  8. add_filter( 'author_link', 'lxtx_yundanran_author_link', 10, 2 );
  9. function lxtx_yundanran_author_link( $link$author_id) {
  10.     global $wp_rewrite;
  11.     $author_id = (int) $author_id;
  12.     $link = $wp_rewrite->get_author_permastruct();
  13.     if ( emptyempty($link) ) {
  14.         $file = home_url( '/' );
  15.         $link = $file . '?author=' . $author_id;
  16.     } else {
  17.         $link = str_replace('%author%', $author_id$link);
  18.         $link = home_url( user_trailingslashit( $link ) );
  19.     }
  20.     return $link;
  21. }
  22. /**
  23.  * 替换作者的存档页的用户名,防止被其他用途
  24.  * 作者存档页链接有2个查询变量,
  25.  * 一个是author(作者用户id),用于未url重写
  26.  * 另一个是author_name(作者用户名),用于url重写
  27.  * 此处做的是,在url重写之后,把author_name替换为author
  28.  * @version 1.0
  29.  * @since yundanran-3 beta 2
  30.  * 2013年10月8日23:19:13
  31.  * @link http://www.wpdaxue.com/use-nickname-for-author-slug.html
  32.  */
  33. add_filter( 'request', 'lxtx_yundanran_author_link_request' );
  34. function lxtx_yundanran_author_link_request( $query_vars ) {
  35.     if ( array_key_exists( 'author_name', $query_vars ) ) {
  36.         global $wpdb;
  37.         $author_id=$query_vars['author_name'];
  38.         if ( $author_id ) {
  39.             $query_vars['author'] = $author_id;
  40.             unset( $query_vars['author_name'] );
  41.         }
  42.     }
  43.     return $query_vars;
  44. }

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

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

另:本文的方法并不能完全的隐藏掉管理员的登录用户名,详见《如何正确的避免WordPress管理员登录用户名被暴露》。


特别声明:为了安全起见,boke112导航已经根据本文所提供的技术及代码,成功把本站所有作者专栏地址改为用户ID,而不再是用户登录名。

本文地址:http://boke112.com/3624.html
关注我们:请关注一下我们的微信公众号:扫描二维码,公众号:aiboke112
温馨提示:文章内容仅代表作者个人观点,不代表boke112导航赞同其观点和对其真实性负责!
版权声明:本文为投稿文章,感谢 龙笑天下 的投稿,版权归原作者所有,欢迎分享本文,转载请保留出处!
WordPress免费响应式主题:Nana
CPA教学与引流技巧

发表评论

呲牙憨笑坏笑偷笑色微笑抓狂睡觉酷流汗鼓掌大哭可怜疑问晕惊讶得意尴尬发怒奋斗衰骷髅啤酒吃饭礼物强弱握手OKNO勾引拳头差劲爱你

表情

  1. 马超金博客
    马超金博客 【村长】 @回复

    感谢分享,都是代码高手啊

  2. Say哈哈
    Say哈哈 【村长】 @回复

    很实用的,持续支持!

  3. Koolight
    Koolight 【省长】 @回复

    博主主题又做了些改变吗?加入了动画?总感觉怪怪的。

    • boke112导航
      boke112导航【站长】 @回复

      @Koolight [疑问] 加入动画???哪个地方?

      • 龙笑天
        龙笑天 【县长】 @回复

        @boke112导航 style=”visibility: visible; animation-delay: 0.3s; animation-name: fadeInUp;” class=”wow fadeInUp animated” data-wow-delay=”0.3s”

        代码里面看到的,这不是动画吗~~ [偷笑]

        • boke112导航
          boke112导航【站长】

          @龙笑天 [偷笑] 原来这个就是动画,我本来想随意添加一个CLASS的,后来想想文章评论多了打开也是一个问题,所以就照搬知更鸟的这个代码了。

      • Koolight
        Koolight 【省长】 @回复

        @boke112导航 评论的地方,滑下来才显示。手机上面。

        • boke112导航
          boke112导航【站长】

          @Koolight 目的是提高打开速度,没看到的没必要这么快显示的,感觉还行

  4. 夏日博客
    夏日博客 【县长】 @回复

    玩WP的,很少有怎么折腾的吧。

  5. 我爱动感单车网
    我爱动感单车网 【省长】 @回复

    了解下,不过我就不折腾了,早些天我已经痛下决心今后不到万不得已的情况下再不折腾博客的这些了,安心更新博文才是正道。

    • 明月登楼的博客
      明月登楼的博客 【总理】 @回复

      @我爱动感单车网 呵呵,是的,最重要的是内容!

    • boke112导航
      boke112导航【站长】 @回复

      @我爱动感单车网 [强] 我也一直都是这么认为的,不过偶尔又忍不住折腾了,以后尽量少折腾

      • 橘子书
        橘子书 【县长】 @回复

        @boke112导航 现在我的想法刚好相反,独立博客不折腾的话,很难写出实用的文章,老是转载或者分享其他人的文章,远不如自己折腾一遍来写最好!
        很多人觉得内容为王,其实真正的内容为王是精品文章(用心去写的原创文章/或者实用的投稿文章)而不是滥竽充数,这样的博客就算一个月只写一篇文章,也是很受其他博友的青睐!

        • 龙笑天
          龙笑天 【县长】

          @橘子书 非常赞同!
          PS:尼玛,敲这么多字不累啊~ [偷笑]

        • boke112导航
          boke112导航【站长】

          @橘子书 [呲牙] 这个就有赖大家多折腾多投稿,有事没事大家多讨论,这样我们这个WordPress圈子大家都会有所进步的

  6. 趣趣金屋
    趣趣金屋 【队长】 @回复

    学习了,受用

  7. 闲鱼
    闲鱼 【村长】 @回复

    这个倒是没考虑到,可以一试

  8. 高平台球阀
    高平台球阀 【农民】 @回复

    很有用啊,感谢分享。

  9. 明月登楼
    明月登楼 【总理】 @回复

    嗯,这个很不错!收藏了!

  10. 管家婆
    管家婆 【镇长】 @回复

    能修改太好了

  11. 新媒体运营
    新媒体运营 【村长】 @回复

    好像自己用不上,不过分享的都值得赞

  12. videoclub
    videoclub 【省长】 @回复

    很好的方法不错 学习

  13. 爱时尚
    爱时尚 【市长】 @回复

    又是wordpress,没人写点zblog的吗

    • boke112导航
      boke112导航【站长】 @回复

      @爱时尚 玩zblog的好像折腾得比较少,没看到什么技术文章,所以我也无能为力

  14. 橘子书
    橘子书 【县长】 @回复

    这个功能非常的必要!

  15. 捌零男人
    捌零男人 【镇长】 @回复

    刚去百度一下各个用户角色的权限

    • boke112导航
      boke112导航【站长】 @回复

      @捌零男人 其实对于我们大多数而言,也就是用到管理员这个角色而已,毕竟很少有站点是对外开放注册的

  16. 老叶养生博客
    老叶养生博客 【镇长】 @回复

    学习受用!

  17. 金榜台博客
    金榜台博客 【县长】 @回复

    貌似还是沙发哦