原帖位置(我增加了一种自己使用的方式):http://www.voidman.com/2008/11/the-better-solution-for-static-paged-post.html
WordPress 提供了多种结构标签,以便我们可以设置各种格式的永久链接结构,再配合一些静态化插件(例如 cos-html-cache),就可以使页面真正静态化。
不过 WordPress 对已分页文章的永久链接的处理方式则会给页面静态化后的访问带来问题。 例如,永久链接结构为 /html/%year%/%monthnum%/%post_id%.html,WordPress 生成的文章相关分页链接如下所示:
yourdomain.com/html/2009/05/126.html
yourdomain.com/html/2009/05/126.html/2
yourdomain.com/html/2009/05/126.html/3
可以看到 WordPress 只是简单地将页码加在了链接尾部,所以当我们静态化其中一页的内容后,我们将只能访问被静态化的那一页内容而无法访问其它分页的内容。为了可以静态化所有分页内容,需要对 WordPress 处理永久链接的方式做些小小的改动,并改变分页链接的形式:
yourdomain.com/html/2009/05/126.html
yourdomain.com/html/2009/05/126-2.html
yourdomain.com/html/2009/05/126-3.html
下面谈谈使用方法(这种方法是目前最好的方法,wordpress主程序升级、主题不升级不会受影响,在wordpress2.7.1、3.1.2、3.1.3上通过并使用着):以 /html/%year%/%monthnum%/%post_id%.html
这样的永久链接结构为例:
1. 打开主题目录下的functions.php
文件,在尾部的“?>”前面添加以下代码:
// 添加分页处理规则
function add_custom_post_rewrite_rules($rules) {
$custom_rules = array(
'html/([0-9]{4})/([0-9]{1,2})/([^/]+)-([0-9]+)\.html$' => 'index.php?year=$matches[1]&monthnum=$matches[2]&p=$matches[3]&page=$matches[4]',
);
$rules = array_merge($custom_rules, $rules);
return $rules;
}
add_filter('post_rewrite_rules', 'add_custom_post_rewrite_rules');
// 修改分页链接
function my_wp_link_pages($args = '') {
$args .= ($args ? '&' : '') . 'echo=0';
$links = wp_link_pages($args);
$links = preg_replace_callback('|(html/[0-9]{4}/[0-9]{1,2}/)([^/]+)(\.html)(/)([0-9]+)|', 'custom_page_link',
$links);
echo $links;
}
function custom_page_link($matches) {
return $matches[1].$matches[2].'-'.$matches[5].$matches[3];
}
2. 打开主题目录下的single.php
文件,查找wp_link_pages
并替换为my_wp_link_pages
。
3. 后台“设置-永久链接”点击一下“保存修改”按钮,大功告成。
至于有朋友出现 .html/xxx 形式的链接访问失效,可能和服务器设置有关,可以通过在 .htaccess 文件中添加规则来解决此问题,如:
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^html/([0-9]{4})/([0-9]{1,2})/([^/]+)\.html/trackback/?$ index.php?year=$1&monthnum=$2&p=$3&tb=1 [L] RewriteRule ^html/([0-9]{4})/([0-9]{1,2})/([^/]+)\.html/feed/(feed|rdf|rss|rss2|atom)/?$ index.php?year=$1&monthnum=$2&p=$3&feed=$4 [L] RewriteRule ^html/([0-9]{4})/([0-9]{1,2})/([^/]+)\.html/(feed|rdf|rss|rss2|atom)/?$ index.php?year=$1&monthnum=$2&p=$3&feed=$4 [L] RewriteRule ^html/([0-9]{4})/([0-9]{1,2})/([^/]+)\.html/page/?([0-9]{1,})/?$ index.php?year=$1&monthnum=$2&p=$3&paged=$4 RewriteRule ^html/([0-9]{4})/([0-9]{1,2})/([^/]+)\.html/([0-9]+)/?$ index.php?year=$1&monthnum=$2&p=$3&page=$4 </IfModule>
注意添加顺序,不要置于 WordPress 生成的规则之后。
博主您好 请问你的博客主题用的是那一款主题.谢谢
本站底部有注明啊!
进来参考一下。。
博主,我的网站可以和你交换链接吗?
不好意思,已经很久不进行连接交换活动了,见谅。
第一次到访你的博客,文章写的很不错,希望博主也到我网站回访。
进来看一下
我的文章都不长,所以无须分页!
po主,我按照上面的设置了,一步步设置,一步没差;
href链接显示正常,一点击(或者手动输入)就跳转了
http://127.0.0.1/html/2013/05/19/xxx-3.html
跳为:
http://127.0.0.1/html/2013/05/19/xxx.html/3
希望po主指教下
请作如下检查,
1.你的版本是否是我说的2.7.1、3.1.2、3.1.3这几个,或附近的,因为随着版本的升级,难免那些程序的调动会改变,我的方法也许会失效。
2.是否使用专门的编辑软件(例如EditPlus)来编辑。
3.编辑好上传以后,是否在后台”永久链接”,”保存修改”。
4.清除一下你的IE缓存之类的,或者重新启动计算机。
wordpress最新版本3.51
有空时我在本地试试你说的“最新版本3.51”吧,一两天内一定给你一个回答。
谢谢博主了
经过全新安装wordpress3.5.1测试后发现,原来的方法确实是失效了。见谅!
不好意思,我目前也没有好办法。
我的博客写了几天就散伙了,实在没什么好写的,看了你的博客才知道,我只是个打酱油滴!
有感而发,想写才写,不怕两天无,就怕两年无啊。
写的很不错,学习了。
这么长的文章不用分页也不行了….分页也是个杯具,
我还是累点,自己手动分页