修改用户的固定链接形式

第一步,修改固定地址的根目录

把author修改为user 非常简单,网上随便一搜就有一大堆文章来解释。代码如下:

  1. add_action('init', 'new_author_base');
  2. function new_author_base() {
  3. ? global $wp_rewrite;
  4. ? $wp_rewrite->author_base = 'user';
  5. }

就是把$wp_rewrite->author_base改一下而已,知道了这个诀窍,你可以改成其他五花八门的作者地址根目录。

第二步,该网页中的作者链接

在网页中,我们一般是使用get_author_posts_url($author_id,?$author_nicename?=?)来获取某一个作者的文章列表页的。我们通过一个钩子,轻松的修改获得的页面的地址:

  1. add_filter('author_link','author_rewrite_link', 99, 3);
  2. function author_rewrite_link($link,$user_id,$user_nickname){
  3. ? $link = str_replace($user_nickname,$user_id,$link);
  4. ? return $link;
  5. }

通过增加author_link钩子,即可实现修改作者页面的链接地址。

第三步,增加重写规则

修改了链接地址之后,页面中的所有作者链接就已经变了,可是如果你点击进去,只能看到404,因为你还需要告诉WordPress,这个链接对应到哪一个页面,再看下面的代码:

  1. add_filter('author_rewrite_rules','my_author_rewrite_rules',99);
  2. function my_author_rewrite_rules($rules){
  3. ? global $wp_rewrite;
  4. ? $user_base = $wp_rewrite->author_base;
  5. ? $newrules[$user_base.'/(d+)$'] = 'index.php?author=$matches[1]';
  6. ? return $newrules;
  7. }

看到了吗?用一个简单的规则就实现了重写。一个点你需要注意,我在上面的代码中使用了(d+),为什么呢?因为我们要使用$user_id来访问作者页面,所以,只有当/user/后面跟上了一个数字的时候,才进行匹配重写。

最后一步,刷新重写

我们有两种方法可以刷新重写规则,一种是去后台更新一下固定链接,另外一种是通过函数来刷新,我采用了函数的方法,把上面第一步中的代码改为:

  1. add_action('init', 'new_author_base');
  2. function new_author_base() {
  3. ? global $wp_rewrite;
  4. ? $wp_rewrite->author_base = 'user';
  5. ? $wp_rewrite->flush_rules();
  6. }

其实就是增加了$wp_rewrite->flush_rules();一行而已。