搞定WordPress的Permalinks

WordPress的Permalinks还是比较好用的,只需要在Options->Permalinks里设置一个/post/%post_id%,基本就可以了,但它的Permalinks样式偶不喜欢,偶喜欢的样式是:

单篇文章

  • domain.tld/post/post_id

存档

  • domain.tld/archive/year
  • domain.tld/archive/year/month
  • domain.tld/archive/year/month/day (这个其实根本用不着)

分类

  • domain.tld/category/category_name

分页

  • domain.tld/page/page_number
  • domain.tld/archive/year/month/page/page_number
  • domain.tld/category/category_name/page/pagenumber

作者 其实也没啥用

  • domain.tld/author/author_name

feeds

  • domain.tld/feed
  • domain.tld/feed/rss

Permalink的样式固定以后,即使以后再更换其它的Blog系统,也按照这个样式来设定,加上把数据也导过去,基本上能够保证用户使用以前的链接也能正常访问新系统的内容。

WordPress生成Permalink的程序主要在wp-includes\classes.php里,有一个WP_Rewrite类。

如果要修改存档的Permalink,只要找到function get_date_permastruct()部分,在靠后的位置有一句

$this->date_structure = $front . $date_endian;

在它前面加上一句

$front = '/archive/';

就可以了,其余的也类似:

$this->front = '/author/';
$this->author_structure = $this->front . $this->author_base . '/%author%';
$this->category_structure .= '%category%';
//下面这一句是增加的
$this->category_structure = '/category/%category%';

然后再修改.htaccess文件,修改相应的规则就可以了,由于只是简单的替换了一下前面的固定单词,所以很好修改的。如果没有.htaccess文件,在Options里设置一下Permalinks就会自动生成了。

6 thoughts on “搞定WordPress的Permalinks”

  1. 你好 想请问一下 因为自己正在修正Permalinks照上方教学遇到了些问题 在修改classes.php时找不到上方所写的↓↓是要这两句一起加吗?

    $this->category_structure .= ‘%category%’; //下面这一句是增加的 $this->category_structure = ‘/category/%category%’;

    还是classes.php里没$this->category_structure .= ‘%category%’;这句就不用加$this->category_structure = ‘/category/%category%’;

    ps.我是wordpress2使用者

    另外,想请问.htaccess要怎么修改~大感谢

  2. $this->category_structure = ‘/category/%category%’; 这句覆盖了上面那句$this->category_structure .= ‘%category%’; 由于我的修改没有直接使用wp2的功能,而是自己根据wp的直接参数类型作的修改 所以可能和wp本身具备的功能设置方法略有不同

    另外关于.htaccess,建议你看一下apache文档中 mod_rewrite部分的规则,应该就会明白许多了。

  3. Pingback: surrender at 1995
  4. 请问,如果以前的文章都是采用缺省的方式,采用动态Url,现在可不可以直接转成永久链接?怎么转?谢谢:)

    1. WordPress本身就支持这功能,所以就是修改设置的事了。 后台Settings里面专门有Permalink这一项,有预设的方式, 这篇文章和我的方法可能都比较旧了。

Leave a Reply

Your email address will not be published. Required fields are marked *