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

不少朋友都在询问,如果将WordPress作者存档链接中的用户名改为用户ID,好吧,一起来看看 前端博客 的方法吧。

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

什么是作者存档页链接

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

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

其中未url重写的参数值是用户id,而url重写后的参数值是用户名。通常,我们都使用了url重写,而作者存档页链接暴露了用户名,可能对wordpress的安全性有点点倾斜(而作者的想法是作者的的参数值统一为用户id,如:author/123,用户页面链接的参数值统一为用户id,如:user/123,关于用户页面链接比作者存档页链接要复杂,后续文章再说),所以我们需要修改参数值为用户id。

修改作者存档页链接

首先要做的是,修改存档页链接,如下示例:

  1. // 修改之前
  2. http://qianduanblog.com/author/admin 
  3. // 修改之后
  4. http://qianduanblog.com/author/123

在wordpress里内置了关于作者存档页链接的钩子,原始的作者存档页链接是这样获取的:

  1. /**
  2.  * Retrieve the URL to the author page for the user with the ID provided.
  3.  *
  4.  * @since 2.1.0
  5.  * @uses $wp_rewrite WP_Rewrite
  6.  * @return string The URL to the author’s page.
  7.  */
  8. function get_author_posts_url($author_id$author_nicename = ) {
  9.     global $wp_rewrite;
  10.     $auth_ID = (int) $author_id;
  11.     $link = $wp_rewrite->get_author_permastruct();
  12.     if ( emptyempty($link) ) {
  13.         $file = home_url( ‘/’ );
  14.         $link = $file . ‘?author=’ . $auth_ID;
  15.     } else {
  16.         if (  == $author_nicename ) {
  17.             $user = get_userdata($author_id);
  18.             if ( !emptyempty($user->user_nicename) )
  19.                 $author_nicename = $user->user_nicename;
  20.         }
  21.         $link = str_replace(‘%author%’, $author_nicename$link);
  22.         $link = home_url( user_trailingslashit( $link ) );
  23.     }
  24.     $link = apply_filters(‘author_link’, $link$author_id$author_nicename);
  25.     return $link;
  26. }

 

参考源文档,生成了这样的用户id的作者存档页链接:

  1. /**
  2.  * 修改url重写后的作者存档页的链接变量
  3.  * @since yundanran-3 beta 2
  4.  * 2013年10月8日23:23:49
  5.  */
  6. add_filter( ‘author_link’, ‘yundanran_author_link’, 10, 2 );
  7. function yundanran_author_link( $link$author_id) {
  8.     global $wp_rewrite;
  9.     $author_id = (int) $author_id;
  10.     $link = $wp_rewrite->get_author_permastruct();
  11.     if ( emptyempty($link) ) {
  12.         $file = home_url( ‘/’ );
  13.         $link = $file . ‘?author=’ . $author_id;
  14.     } else {
  15.         $link = str_replace(‘%author%’, $author_id$link);
  16.         $link = home_url( user_trailingslashit( $link ) );
  17.     }
  18.     return $link;
  19. }

 

修改之后,在前台输出作者存档页的链接:

  1. get_author_posts_url(1);
  2. // =>http://qianduanblog.com/author/1

 

说明钩子使用的是正确的,但当我们打开这个链接的时候,出现了404。这是因为,原始的作者存档页链接的url重写规则是根据用户名来的,而现在修改为了用户id,重写规则不匹配,出现了404。

修改作者存档页查询变量

为了避免出现404,我们需要修改作者存档页的url重写规则。

  1. /**
  2.  * 替换作者的存档页的用户名,防止被其他用途
  3.  * 作者存档页链接有2个查询变量,
  4.  * 一个是author(作者用户id),用于未url重写
  5.  * 另一个是author_name(作者用户名),用于url重写
  6.  * 此处做的是,在url重写之后,把author_name替换为author
  7.  * @version 1.0
  8.  * @since yundanran-3 beta 2
  9.  * 2013年10月8日23:19:13
  10.  * @link https://www.xhsay.com/use-nickname-for-author-slug.html
  11.  */
  12. add_filter( ‘request’, ‘yundanran_author_link_request’ );
  13. function yundanran_author_link_request( $query_vars ) {
  14.     if ( array_key_exists( ‘author_name’, $query_vars ) ) {
  15.         global $wpdb;
  16.         $author_id=$query_vars[‘author_name’];
  17.         if ( $author_id ) {
  18.             $query_vars[‘author’] = $author_id;
  19.             unset( $query_vars[‘author_name’] );
  20.         }
  21.     }
  22.     return $query_vars;
  23. }

很巧合的是,作者存档页的查询变量有2个,之前说过,1个是url未重写的用户id(author),另一个是url已重写的用户名(author_name),而现在直接传递过来了用户id,只需要把参数名称author_name修改为author即可。

再次打开刚才的链接(http://qianduanblog.com/author/1),出现了正确页面。而如果打开原始的链接(http://qianduanblog.com/author/admin)就会出现404页面了,说明我们的修改正确了。

人已赞赏
WordPress建站

WordPress 客户工单支持/知识库文档系统 KB Support

2021-3-10 7:16:11

WordPress建站

功能齐全的WordPress一站式优化插件–WPJAM-Basic

2021-3-10 7:16:23

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