WordPress 分页文章静态化完美解决方案

分享最完美的WordPress 分页文章静态化解决方案。很多人都说wordpress文章静态化有利于百度等搜索引擎素引,我们姑且不考虑是否真的如此,但是把网页链接静态化看起来也是比较美观的,所以个人认为还是把链接做成静态化形式比较好。不过 WordPress 对已分页文章的永久链接的处理方式则会给页面静态化带来点问题。 例如,下面以永久链接结构为 /details/%post_id%.html为例,WordPress 生成的文章分页链接如下所示:

yourdomain.com/details/postname.html

yourdomain.com/details/postname.html/2

yourdomain.com/details/postname.html/3

这样的分页链接虽然可以打开,不过看起来实在不舒服,我们期望的完美分页链接应该是如下形式

yourdomain.com/details/postname.html

yourdomain.com/details/postname_2.html

yourdomain.com/details/postname_3.html

那该如何实现这样的分页静态化链接呢?分3步走。

1、打开wordpress主题目录下的functions.php文件,添加以下代码:

add_filter(‘post_rewrite_rules’, ‘add_custom_post_rewrite_rules’);
function add_custom_post_rewrite_rules($rules) {
$custom_rules = array(
‘details/([0-9]+)_([0-9]+)\.html$’ => ‘index.php?p=$matches[1]&page=$matches[2]’,
);
$rules = array_merge($custom_rules, $rules);
return $rules;
}
// 修改分页链接
add_filter( ‘redirect_canonical’, ‘my_wp_link_pages’);//禁用wp的自动链接修正功能
function my_wp_link_pages($args = ”) {
$args .= ($args ? ‘&’ : ”) . ‘echo=0’;
$links = wp_link_pages($args);
$links = preg_replace_callback(‘|(details/)([0-9]+)(\.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。然后,后台“设置-永久链接”点击一下“保存修改”按钮。

注意:如果你的网站环境是Apache,当你点击后台“设置-永久链接-保存修改”后,wordpress会自动更新你网站的“.htaccess”文件,如果其中有一些你自己加的重定向规则,那当你点击那个保存按钮时,重定向规则会被清空,所以建议在点击那个“保存修改”按钮前把你的“.htaccess”先备份一下,保存完再替换回去。

3、如果你的网站为apache环境,请更新你的RewriteRule,在网站根目录下的“.htaccess”最后加入如下代码即可。

<IfModule mod_rewrite.c>

RewriteEngine On
RewriteBase /
RewriteRule ^details/([0-9]+)\.html/trackback/?$ index.php?p=$1&tb=1 [L]
RewriteRule ^details/([0-9]+)\.html/feed/(feed|rdf|rss|rss2|atom)/?$ index.php?p=$1&feed=$2 [L]
RewriteRule ^details/([0-9]+)\.html/(feed|rdf|rss|rss2|atom)/?$ index.php?p=$1&feed=$2 [L]
RewriteRule ^details/([0-9]+)\.html/page/?([0-9]{1,})/?$ index.php?p=$1&paged=$2
RewriteRule ^details/([0-9]+)\.html/([0-9]+)/?$ index.php?p=$1&page=$2

</IfModule>

最后要说的是,如果你的网站固定连接格式不一样,则相应的代码需要修改,上面是以“/details/%post_id%.html”这样的固定链接格式为例的。

其他修改方法在wordpress新版本中失效了(wordpress新的自动链接修正功能作怪),但本文的方法支持wordpress新版本。最重要的原因在于functions.php文件中的

add_filter( ‘redirect_canonical’, ‘my_wp_link_pages’);//禁用wp的自动链接修正功能