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

  • A+
所属分类:wrodprss
广告也精彩

我们通常将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链接形式原代码:展开

上述代码会与No category parents插件冲突,解决办法:

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin
广告也精彩

发表评论

您必须登录才能发表评论!