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

  • A+
所属分类:WordPress

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

/morning-paper-news.html/3

/132.html/2

html既然是后缀就应该一直在最后,来自solagirl的《用.html作为url后缀时的分页链接问题》一文,为我们提供了解决办法。

不过原代码只提供了/%postname%.html的修改方法。

本文提供一下/%post_id%.html的修改方法。

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

将下面代码添加到当前主题 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插件查看链接正则写法并修改上述代码。

附:适合/%postname%.html链接形式原代码:展开

  1. /*
  2. *修复.html分页链接
  3. */
  4. class Rewrite_Inner_Page_Links{
  5.     var $separator;
  6.     function __construct(){
  7.         $this->separator = '/page-';
  8.         if( !is_admin() || defined( 'DOING_AJAX' ) ) :
  9.             add_filter( 'wp_link_pages_link', array( $this, 'inner_page_link_format' ), 102 ); // for inner pages
  10.             add_filter( 'get_comments_pagenum_link', array( $this, 'comment_page_link_format' ) );
  11.             add_filter( 'redirect_canonical', array( $this, 'cancel_redirect_for_paged_posts' ), 102 );
  12.         endif;
  13.         if( is_admin() ) :
  14.             add_filter( 'rewrite_rules_array', array( $this, 'pagelink_rewrite_rules' ) );
  15.             register_activation_hook( __FILE__, array( $this, 'flush_rewrite_rules' ) ) ;
  16.             register_deactivation_hook( __FILE__, array( $this, 'flush_rewrite_rules' ) );
  17.         endif;
  18.     }
  19.     function flush_rewrite_rules(){
  20.         flush_rewrite_rules();
  21.     }
  22.     /**
  23.      * 修改post分页链接的格式
  24.      * @param string $link
  25.      * @param int $number
  26.      * @return string
  27.      */
  28.     function inner_page_link_format( $link, $number ){
  29.         if( $number > 1 ){
  30.             if( preg_match( '%<a href=".*\.html/\d*"%', $link ) ){
  31.                 $link = preg_replace( "%(\.html)/(\d*)%", $this->separator."$2$1", $link );
  32.             }
  33.         }
  34.         return $link;
  35.     }
  36.     /**
  37.      * 修改评论分页链接
  38.      * @param string $result
  39.      * @return string
  40.      */
  41.     function comment_page_link_format( $result ){
  42.         // From hello-world.html/comment-page-1#comments to hello-world/comment-page-1.html#comments
  43.         if( strpos( $result, '.html/' ) !== false ){
  44.             $result = preg_replace( '=([^/]+)(.html)/comment-page-([0-9]{1,})=', "$1/comment-page-$3$2" ,$result );
  45.         }
  46.         return $result;
  47.     }
  48.     /**
  49.      * 为新的链接格式增加重定向规则,移除原始分页链接的重定向规则,防止重复收录
  50.      *
  51.      * 访问原始链接将返回404
  52.      * @param array $rules
  53.      * @return array
  54.      */
  55.     function pagelink_rewrite_rules( $rules ){
  56.         foreach ($rules as $rule => $rewrite) {
  57.             if ( $rule == '([^/]+).html(/[0-9]+)?/?$' || $rule == '([^/]+).html/comment-page-([0-9]{1,})/?$' ) {
  58.                 unset($rules[$rule]);
  59.             }
  60.         }
  61.         $new_rule['([^/]+)('.$this->separator.'([0-9]+))?.html/?$'] = 'index.php?name=$matches[1]&page=$matches[3]';
  62.         $new_rule['([^/]+)/comment-page-([0-9]{1,}).html(\#[^\s])?$'] = 'index.php?name=$matches[1]&cpage=$matches[2]';
  63.         return $new_rule + $rules;
  64.     }
  65.     /**
  66.      * 禁止WordPress将页面分页链接跳转到原来的格式
  67.      * @param string $redirect_url
  68.      * @param string $requested_url
  69.      * @return bool
  70.      */
  71.     function cancel_redirect_for_paged_posts( $redirect_url, $requested_url ){
  72.         global $wp_query;
  73.         if( is_single() && $wp_query->get( 'page' ) > 1 ){
  74.             return false;
  75.         }
  76.         return true;
  77.     }
  78. }
  79. new Rewrite_Inner_Page_Links();

 

提示

上述代码会与《给WordPress分类目录和页面添加斜杠》和No category parents插件冲突,解决办法有待研究。

 

weinxin
我的微信
分享交流WordPress经验与技巧,关注前端设计与网站制作。仅用于功能演示。
Begin主题购买
Begin主题购买

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:30   其中:访客  29   博主  1

    • avatar BanYuner 5

      我个人方面还是不会在乎这些 ,所以还是算了 ,不折腾了

      • avatar 站长萌萌哒 1

        这样改会对原来搜索引擎收录的分页链接有影响吗

        • avatar 今日新闻头条 3

          文章不错感谢分享

          • avatar 懿古今 3

            新站可以折腾,老站感觉就无所谓了,已经禁止抓取评论分页和文章分页

            • avatar 优选汇 2

              感谢分享,很有用的方法。

              • avatar 我爱动感单车网 7

                至今还没使用过文章分页这个功能,我个人就无需设置了 :razz:

                • avatar 绿软库(www.lvrku.com) 5

                  不设置分页,长页面,稍微美化就行了

                  • avatar 的范德萨发 0

                    第三方第三方

                    • avatar 趣果网 3

                      看到这篇文章之后,我马上试了试,果然是这样,之前都没发现这样的问题。马上开始改。

                      • avatar 趣果网 3

                        我的链接结构是 /article/%post_id%.html 改了之后,表示无效。

                        • avatar 爱的翅膀 0

                          为什么不支持三方登录??

                          • avatar 野人摊影视分享 1

                            说实话这这种分页链接挺好看的

                            • avatar 今日新闻头条 3

                              文章不错支持一下吧

                              • avatar 米扑博客 1

                                博主很赞,完善细节,追求极致,学习

                                • avatar 书法 0

                                  这个还是很有用的

                                  • avatar 新闻头条 3

                                    文章不错支持一下吧,非常喜欢

                                    • avatar 童话故事 0

                                      免费分享:空手套白狼,每30分钟赚18元,全新暴力正规项目,限时招真传弟子!

                                      当你还在思考的时候,你的对手早就已经开始操作了!

                                      赚钱最核心的秘密,那就是行动一定要快!狠!准!你只能从成功走向成功!

                                      空手套白狼定义:是指花费极小的代价,获取一个丰厚的回报!

                                      快速拜师渠道:威 3073994742 (写验证码466,加我必通过)

                                      • avatar 明月登楼 5

                                        我就是看到冲突了,只是收藏了!
                                        其实我没有让文章分页的习惯!

                                        • avatar 热腾网 3

                                          百度都已经收录了,不在变动了。

                                          • avatar 科技Fans 0

                                            :wink: 祝 鸟哥越更越年轻

                                            • avatar 仙城博客 0

                                              一如既往的懒啊 懒得折腾

                                              • avatar 灰常记忆 3

                                                一来就看到干货,直接拿走。

                                                • avatar sys 0

                                                  在『给分类目录和页面链接末尾加斜杠』这段代码的判断中加入以下条件,过滤掉文章分页链接形式即可解决冲突:
                                                  $type_of_url != ‘single_paged’

                                                  • avatar nnnncccc 1

                                                    挺好的

                                                    • avatar sys 1

                                                      在『给分类目录和页面链接末尾加斜杠』这段代码的判断中加入以下条件,过滤掉文章分页链接形式即可解决冲突:
                                                      $type_of_url != ‘single_paged’0bed80897fb300876eb6c1a35a73a9a8

                                                      • avatar 丐帮刘德华 0

                                                        支持知更鸟大大,非常牛!