如何将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较早的用户(最好的解决思路是修改个人资料时,如果使用了相同昵称,进行提示。但是不知具体如何实现,如果有朋友知道,希望告知!)。

在这里介绍另一种不会重复的方法,就是将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!

另:本文的方法并不能完全的隐藏掉管理员的登录用户名,详见《》。


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