修正WordPress设置伪静态后文章分页链接问题

转载   知更鸟  2017-11-02 15:58:13  88 人阅读  11 条评论

投放广告联系   诚邀合作伙伴   赞助我们   垃圾评论惩罚

我们通常将 WordPress 固定链接设为 /%postname%.html 或者/%post_id%.html,这样可以让页面看起来像静态页,但当文章有分页时,分页链接会变得奇怪,比如:

  • /morning-paper-news.html/3
  • /132.html/2

html 既然是后缀就应该一直在最后,来自solagirl的《用.html作为url后缀时的分页链接问题》一文,为我们提供了解决办法。不过原代码只提供了 /%postname%.html 的修改方法,本文就补充完善一下,提供一下 /%post_id%.html 的修改方法。具体做法也很简单,只需要将以下代码添加到当前主题 functions.php 中:

  1. // 适合/%post_id%.html分页链接修正
  2. class Rewrite_Inner_Page_Links_id{
  3.     var $separator;
  4.     function __construct(){
  5.         $this->separator = '/page-';
  6.         if( !is_admin() || defined( 'DOING_AJAX' ) ) :
  7.             add_filter( 'wp_link_pages_link', array$this, 'inner_page_link_format' ), 10, 2 );
  8.             add_filter( 'get_comments_pagenum_link', array$this, 'comment_page_link_format' ) );
  9.             add_filter( 'redirect_canonical', array$this, 'cancel_redirect_for_paged_posts' ), 10, 2 );
  10.         endif;
  11.         if( is_admin() ) :
  12.             add_filter( 'rewrite_rules_array', array$this, 'pagelink_rewrite_rules' ) );
  13.             register_activation_hook( __FILE__array$this, 'flush_rewrite_rules' ) ) ;
  14.             register_deactivation_hook( __FILE__array$this, 'flush_rewrite_rules' ) );
  15.         endif;
  16.     }
  17.     function flush_rewrite_rules(){
  18.         flush_rewrite_rules();
  19.     }
  20.     // 修改post分页链接的格式
  21.     function inner_page_link_format( $link$number ){
  22.         if$number > 1 ){
  23.             if( preg_match( '%<a href=".*\.html/\d*"%', $link ) ){
  24.                 $link = preg_replace( "%(\.html)/(\d*)%"$this->separator."$2$1"$link );
  25.             }
  26.         }
  27.         return $link;
  28.     }
  29.      // 为新的链接格式增加重定向规则,移除原始分页链接的重定向规则,防止重复收录
  30.     function pagelink_rewrite_rules( $rules ){
  31.         foreach ($rules as $rule => $rewrite) {
  32.             if ( $rule == '([0-9]+).html(/[0-9]+)?/?$' ) {
  33.                 unset($rules[$rule]);
  34.             }
  35.         }
  36.         $new_rule['([0-9]+)('.$this->separator.'([0-9]+))?.html/?$'] = 'index.php?p=$matches[1]&page=$matches[3]';
  37.         return $new_rule + $rules;
  38.     }
  39.     // 禁止WordPress将页面分页链接跳转到原来的格式
  40.     function cancel_redirect_for_paged_posts( $redirect_url$requested_url ){
  41.         global $wp_query;
  42.         if( is_single() && $wp_query->get( 'page' ) > 1 ){
  43.             return false;
  44.         }
  45.         return true;
  46.     }
  47. }
  48. new Rewrite_Inner_Page_Links_id();

添加代码后,需要到后台 >> 设置 >> 固定链接中保存一下设置,之后再次打开文章分页链接,就会变成类似的:

  • /morning-paper-news/page-2.html
  • /132/page-2.html

注:上述代码并没有评论分页的链接修正,本人无此刚需未做研究。其它固定链接形式,需要安装 rewrite rules inspector 插件查看链接正则写法并修改上述代码。

上述代码会与《如何实现WordPress分类目录和页面链接地址以斜杠/结尾》代码冲突,解决办法有待研究。

历史上的今天:

文章标签: ,   ,  
温馨提示:文章内容仅代表作者个人观点,不代表boke112导航赞同其观点和对其真实性负责!
版权声明:本文为转载文章,来源于 知更鸟 ,版权归原作者所有,欢迎分享本文,转载请保留出处!
淘宝天猫无门槛专享优惠券

 发表评论


  1. 前沿网
    前沿网 【书童】 @回复

    现在分享文章打开后怎么都是google的那个分析链接停留一下啊?

  2. 说彩网
    说彩网 【书童】 @回复

    我当时的处理办法是做一个301重定向,还是博主这个方法好。

  3. 别彧
    别彧 【书童】 @回复

    谢谢分享

  4. 笛声
    笛声 【秀才】 @回复

    文章分页……,还不如直接多写一篇文章呢。。。

  5. 玉满斋
    玉满斋 【尚书】 @回复

    这个真心要赞一个!不过,一般我很好在文章内分页!一是不方便,二是就怕这个分页伪静态!

  6. 趣果网
    趣果网 【秀才】 @回复

    感谢分享,我的链接结构是 /article/%post_id%.html 按照要求,设置了,没任何作用。不知道啥时候能把/article/%post_id%.html的修改方法也分享一下啊,先谢谢了。

  7. 品牌馆
    品牌馆 【举人】 @回复

    很实用的技术,谢谢博主分享

  8. 历史趣谈LishiQtan
    历史趣谈LishiQtan 【秀才】 @回复

    很实用的技术,谢谢博主分享

  9. 九哥
    九哥 【进士】 @回复

    分页文章比较少,有这个问题,这个方法不错。

  10. 蓝云互联-免备案主机
    蓝云互联-免备案主机 【小白】 @回复

    写的很好

  11. 小白seo博客
    小白seo博客 【秀才】 @回复

    文章不错