北极寒流 » 网络资源 » WordPress 分页文章静态化完美解决方案 - 2014.08.03

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

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

yourdomain.com/post/postname.html   

yourdomain.com/post/postname.html/2

yourdomain.com/post/postname.html/3

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

yourdomain.com/post/postname.html  

yourdomain.com/post/postname_2.html  

yourdomain.com/post/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(
    'post/([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('|(post/)([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 ^post/([0-9]+)\.html/trackback/?$ index.php?p=$1&tb=1 [L]
RewriteRule ^post/([0-9]+)\.html/feed/(feed|rdf|rss|rss2|atom)/?$ index.php?p=$1&feed=$2 [L]
RewriteRule ^post/([0-9]+)\.html/(feed|rdf|rss|rss2|atom)/?$ index.php?p=$1&feed=$2 [L]
RewriteRule ^post/([0-9]+)\.html/page/?([0-9]{1,})/?$ index.php?p=$1&paged=$2
RewriteRule ^post/([0-9]+)\.html/([0-9]+)/?$ index.php?p=$1&page=$2

</IfModule>

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

其他一些固定链接修改方法请参考http://www.articn.com/post/143.html页面。唯一要注意的是,http://www.articn.com/post/143.html中提供的修改方法在wordpress新版本中失效了(wordpress新的自动链接修正功能作怪),但本文的方法支持wordpress新版本。最重要的原因在于functions.php文件中的

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

这行代码,所以大家务必结合本文与http://www.articn.com/post/143.html中提供的方法修改成适合你固定链接的代码。

目前本站没启用该功能,如果希望查看分页静态化效果请看30款免费草书英文字体http://www.epinv.com/post/4859.html  这篇文章

1个评论

  1. 刘雁鹏 说道:

    参照你的代码我解决了%post_id%.html,这个问题,非常感谢!
    其他的亲们想看效果的可以百度 猿爸爸 去那里看看。

评论关闭