如何将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. function lxtx_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( “SELECT user_id FROM {$wpdb->usermeta} WHERE meta_key=’nickname’ AND meta_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. function lxtx_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.  * @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. }  

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

人已赞赏
wordpress教程

WordPress 绑定多个域名的方法

2018-3-20 20:43:00

wordpress教程

给WordPress无更新旧文章添加提示语

2018-3-21 14:43:26

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索