WordPress 静态化的烦恼

其实,确切地说应该是前几日的烦恼了。因为将永久链接结构设置成以下形式的关系,在静态化页面后,由于目录冲突,WP 便无法按年月浏览了。

/%year%/%monthnum%/%postname%.html

起初将静态化页面生成的年份、月份目录设置成可以列表,不至于出现浏览错误。不过这样一来,侧栏的日历以及按月归档功能便如同鸡肋了。

注意到若将永久链接结构设置设置成“使用日志的 ID 号”结构,按日期浏览时,WP 会自动加上前缀“date”,这是为了防止解析页面地址的时候将日志 ID 号和日期混淆起来。于是我想当然地将永久链接结构修改成:

/archives/%year%/%monthnum%/%postname%.html

以为可以解决问题。不料按年月浏览时,WP 居然会自动将地址修改为以下形式,也就说仍旧会产生目录冲突:

/archives/%year%/%monthnum%/

如此一来,只好再继续暴力一把了。

打开 rewrite.php 文件,找到

foreach ($tokens[0] as $token) {
  if ( (($token == '%post_id%') && ($tok_index <= 3)) ) {
    $front = $front . 'date/';
    break;
  }
  $tok_index++;
}

修改成

foreach ($tokens[0] as $token) {
  if ( (($token == '%post_id%') && ($tok_index <= 3)) || ( $token == '%year%' && $tok_index == 1) ) {
    $front = $front . 'date/';
    break;
  }
  $tok_index++;
}

一番折腾,总算解决问题。

为了将 WP 静态化,已经不止一次遇到问题了,也许还会遇到更多不可预知的问题。想想,折腾,有时候也算是一种乐趣吧。

已经有了更好的解决方案,点此查看

3 thoughts on “WordPress 静态化的烦恼

  1. tsian

    问一下,你这个静态化是指rewrite还是真正的html实体文件?
    如果是后者,你怎么保证我在这个日志留言了,其他日志侧边栏的recent comments也相应更新?

    Reply

Leave a Reply

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