让 Wordpress 分页文章也可以静态化
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:
已经有了更好的解决方案,点此查看
Comments
@ddkk3000:
将http://www.voidman.com/uploads/wp/2008/03/wp_link_pages.phps里的代码覆盖wp-includes/post-template.php 里的 wp_link_pages 函数就可以了
博主,我覆盖了以后,访问分页显示404未找到。
@ddkk3000:
wp-includes/rewrite.php 文件修改过后,要到后台设置里重新生成一下永久链接规则
为何我修改了永久链接后(/html/%year%/%monthnum%/%day%/%postname%.html),分页面就出现问题,还原到默认永久链接,分页就能浏览,请教解决办法。
@rekey:
文中举例只适用于 /%year%/%monthnum%/%postname%.html 这样的永久链接结构
请问如何通过.htaccess 达到这样的效果呢?而且.html/trackback也是不正常,发现博主的会转向解决这一问题,是303永久定向吗?
请教,如果想用于/%year%/%monthnum%%day%/%postname%.html这样的永久链接呢?该怎么办呢?
@life97:
只要是以%postname%.html结尾的永久链接,应该都适用。修正一下前面和 rekey 说的。不过为了避免冲突, %postname% 不要以字符 - 加数字的形式结尾,如 -45
如果想通过修改 .htaccess 实现,按照你的 URL 结构,添加
RewriteRule ^([0-9]{4})/([0-9]{2})([0-9]{2})/([^/]+)-([0-9]+).html$ index.php?year=$1&monthnum=$2&day=$3&name=$4&page=$5 [L]
.html/trackback 的问题我也忘记之前是咋整的了,本地测试也是有问题。
@David:
添加这个.htaccess规则,并不能正确转向啊,举例:http://alibm.org/2008/0316/popularity-model-leah-dizon-chiedisang.html/2
另外,trackback这个能不能也通过.htaccess转向呢?
在没有生成html文件时,添加这个.htaccess规则分页是可以转向的,但生成html后就不生效了。估计还是得用改文件的方法,但楼主提供的文中举例只适用于 /%year%/%monthnum%/%postname%.html 这样的永久链接结构,如果想用/%year%/%monthnum%%day%/%postname%.html这样的永久链接呢?该怎么改呢?
请各位移步至 http://www.voidman.com/2008/11/the-better-solution-for-static-paged-post.html
Leave a Reply