让 WordPress 分页文章也可以静态化

Posted by David on 2008-03-07 in Blog Related

WordPress 提供了多种结构标签,以便我们可以设置各种格式的永久链接结构,再配合一些静态化插件(例如 cos-html-cache),就可以使页面真正静态化。

不过 WordPress 对已分页文章的永久链接的处理方式则会给页面静态化后的访问带来问题。 例如,永久链接结构为 /%year%/%monthnum%/%postname%.html,WordPress 生成的文章相关分页链接如下所示:

yourdomain.com/2008/03/postname.html 
yourdomain.com/2008/03/postname.html/2 
yourdomain.com/2008/03/postname.html/3 

可以看到 WordPress 只是简单地将页码加在了链接尾部,所以当我们静态化其中一页的内容后,我们将只能访问被静态化的那一页内容而无法访问其它分页的内容。为了可以静态化所有分页内容,需要对 WordPress 处理永久链接的方式做些小小的改动,并改变分页链接的形式:

yourdomain.com/2008/03/postname.html 
yourdomain.com/2008/03/postname-2.html
yourdomain.com/2008/03/postname-3.html


以前面提到的永久链接结构为例,作如下修改:

/*
  打开 wp-includes/rewrite.php 文件
  找到 $rewrite = array_merge($rewrite, array($match => $query))
  在这行代码之前添加以下代码:
*/
if (strpos($match, '.html') !== false && strpos($query, '&page=') !== false) {
  $match = str_replace('(/[0-9]+)?/?$', '$', $match);
  $rewrite = array_merge($rewrite, array(str_replace('([^/]+).html', '([^/]+)-([0-9]+).html', $match) => $query));
}

以上代码使 WordPress 可以处理第一页后面的分页链接。其实通过修改 .htaccess 也可以达到同样的效果。

除此之外还需要修改文章分页链接生成模板。打开 wp-includes/post-template.php 文件,修改 wp_link_pages 函数(这段代码不太好贴,点此查看)。

具体效果,可以点击这里还有这里查看。

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

Tags: , , .