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

假期很短暂,快乐却无边,工作很苦闷,赚钱最重要,陶醉在假期的快乐中,奋斗在工作的战线中,苦中寻乐一点甜,快乐与你长相伴。

什么是作者存档页链接?

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. *20170527:修复原 wordpress 大学版本的中文昵称 404 问题
  5. */
  6. //使用昵称替换用户名,通过用户 ID 进行查询
  7. add_filter('request','lxtx_wpdaxue_request');
  8. functionlxtx_wpdaxue_request($query_vars)
  9. {
  10. if(array_key_exists('author_name',$query_vars)){
  11. global$wpdb;
  12. $author_id=$wpdb->get_var($wpdb->prepare("SELECTuser_idFROM{$wpdb->usermeta}WHEREmeta_key='nickname'ANDmeta_value=%s",urldecode($query_vars['author_name'])));
  13. if($author_id){
  14. $query_vars['author']=$author_id;
  15. unset($query_vars['author_name']);
  16. }
  17. }
  18. return$query_vars;
  19. }
  20. //使用昵称替换链接中的用户名
  21. add_filter('author_link','lxtx_wpdaxue_author_link',10,3);
  22. functionlxtx_wpdaxue_author_link($link,$author_id,$author_nicename)
  23. {
  24. $author_nickname=get_user_meta($author_id,'nickname',true);
  25. if($author_nickname){
  26. $link=str_replace($author_nicename,$author_nickname,$link);
  27. }
  28. return$link;
  29. }

接着我们在个人资料中修改昵称为其他名称,比如,用户 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. *@sinceyundanran-3beta2
  6. *2013 年 10 月 8 日 23:23:49
  7. */
  8. add_filter('author_link','lxtx_yundanran_author_link',10,2);
  9. functionlxtx_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. *@version1.0
  29. *@sinceyundanran-3beta2
  30. *2013 年 10 月 8 日 23:19:13
  31. *@linkhttp://www.wpdaxue.com/use-nickname-for-author-slug.html
  32. */
  33. add_filter('request','lxtx_yundanran_author_link_request');
  34. functionlxtx_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,而不再是用户登录名。

到此这篇关于如何将WordPress作者存档链接中的用户名改为昵称或ID就介绍到这了。你可以很有个性,但某些时候请收敛。更多相关如何将WordPress作者存档链接中的用户名改为昵称或ID内容请查看相关栏目,小编编辑不易,再次感谢大家的支持!

您可能有感兴趣的文章
WordPress站点Gravatar头像前后台不显示的如何解决办法

WordPress做公司官网好吗?会不会显得档次很低?

WordPress主题需要支持https吗?WordPress站点如何如何实现https?

WordPress站点的页面/标签/分类URL地址如何添加.html?

WordPress站点更换了域名后数据库应该如何操作替换新旧域名?