好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

WordPress固定链接修改成日期 作者的形式 - WordPr

WordPress固定链接修改成日期 作者的形式

在乌徒帮修改了固定链接形式之后,把形式修改为/post/%post_id%/%postname%.html的形式,但是在这之后出现了一个问题,就算日期、作者页面的URL前面多了一个post.例如/post/author/frustigor,/post/date/2014/04,这就很奇怪了,非常不好看,也没有必要,我们想要的结果三/author/name和/date/year/month的形式,怎么来修理呢?这篇文章告诉你答案.

1.你必须了解的事

我们需要先了解这些事实:1.你必须通过编写wordpress相关的php程序才能解决这个问题,2.你必须懂,这个问题关系着两个东西,一个是链接,例如[2014年3月]这个边侧栏里面的链接必须修改为链接到不带post的URL,另外一个是重写,你得让wordpress知道这个URL是用来调用月份的归档栏目的.

这两个问题可是比较难懂的,你要是对wordpress的开发一窍不通,就直接往下拖,如果你对实现原理比较感兴趣,就慢慢往下看.

2.如何修改链接,使点击链接进入我们想要的URL.

这个其实没有那么难,非常简单,wordpress里面有一些hook,可以直接实现这个效果,主要是year_link、month_link、day_link、author_link,怎么用呢?代码如下:

add_filter( 'author_link' , 'archive_rewrite_link' , 99, 2);  add_filter( 'day_link' , 'archive_rewrite_link' , 99, 2);  add_filter( 'month_link' , 'archive_rewrite_link' , 99, 2);  add_filter( 'year_link' , 'archive_rewrite_link' , 99, 2);  function  archive_rewrite_link( $link ){    global   $wp_rewrite ;    $front  = ltrim( $wp_rewrite ->front, '/' );    $link  = str_replace_first( $front , '' , $link );    return   $link ;  } 

上面的str_replace_first是我自己写的一个函数,往下拖,在全部代码里面可以看到,非常简洁的一段代码,刷新看看,是不是这些链接都修改了,不过不要高兴的太早,链接是修改过来了,但是不要高兴的太早,是不是看到404了,对的,wordpress还根本不知道你已经修改过链接了.

3.为wordpress增加重写规则 ,让修改后的链接可以被正常访问.

在wordpress里面有个叫rewrtie的全局类,这个类超级厉害,决定了你当前访问的URL会显示什么内容,如果你去看别人写的有关这方面的文章,绝对会吓死你,里面的逻辑非常复杂,不过,不用担心,我们这里给一个极其简单的代码就可以实现.代码如下:

add_filter( 'author_rewrite_rules' , 'archive_rewrite_rules' ,99);  add_filter( 'date_rewrite_rules' , 'archive_rewrite_rules' ,99);  function  archive_rewrite_rules( $rules ){    global   $wp_rewrite ;    $front  = ltrim( $wp_rewrite ->front, '/' );       foreach ( $rules   as   $key  =>  $value ){           $newrules [str_replace_first( $front , '' , $key )] =  $value ;      }       return   $newrules ;  } 

有没有发现,比前面一段代码还短,其实道理也很简单,在URL被解析之前,我们通过修改全局类$wp_rewrite变量,即可实现我们的目的,(这种方法非常投机取巧,因为对于wordpress本身而言,数据库里面的重写规则没有变,不过,这有什么关系呢?我们可以实现自己的效果就好了)

4.完整的代码

如果你是小白,把下面的代码拷贝到你的主题目录中的functions.php文件中,注意,一定要放在<?php ?>里面,代码如下:

// 替换字符串中第一次出现的子串   if (!function_exists( 'str_replace_first' )):  function  str_replace_first( $find , $replace , $string ){    $position  =  strpos ( $string , $find );    if ( $position  !== false){     $length  =  strlen ( $find );      $string  = substr_replace( $string , $replace , $position , $length );     return   $string ;   } else {     return  false;   }  }   endif ;    // 首先,修改网页里面的链接   add_filter( 'author_link' , 'archive_rewrite_link' , 99, 2);  add_filter( 'day_link' , 'archive_rewrite_link' , 99, 2);  add_filter( 'month_link' , 'archive_rewrite_link' , 99, 2);  add_filter( 'year_link' , 'archive_rewrite_link' , 99, 2);  function  archive_rewrite_link( $link ){    global   $wp_rewrite ;    $front  = ltrim( $wp_rewrite ->front, '/' );    $link  = str_replace_first( $front , '' , $link );    return   $link ;  }    // 接着,修改重写规则   add_filter( 'author_rewrite_rules' , 'archive_rewrite_rules' ,99);  add_filter( 'date_rewrite_rules' , 'archive_rewrite_rules' ,99);  function  archive_rewrite_rules( $rules ){    global   $wp_rewrite ;    $front  = ltrim( $wp_rewrite ->front, '/' );       foreach ( $rules   as   $key  =>  $value ){           $newrules [str_replace_first( $front , '' , $key )] =  $value ;      }       return   $newrules ;  } 

这里也给了不少有关URL的思路,例如今后你可以通过修改$wp_rewrite来快速实现修改author页面的前缀了,例如你可以把你的作者页面修改为/user/user_id的形式,是不是很酷.

查看更多关于WordPress固定链接修改成日期 作者的形式 - WordPr的详细内容...

  阅读:70次