首页 > CMS > Wordpress > 正文

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

2024-09-07 00:52:46
字体:
来源:转载
供稿:网友

我们通常将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.  
  3. class Rewrite_Inner_Page_Links_id{ 
  4.  
  5.     var $separator
  6.  
  7.     function __construct(){ 
  8.  
  9.         $this->separator = '/page-'
  10.  
  11.         if( !is_admin() || defined( 'DOING_AJAX' ) ) : 
  12.  
  13.             add_filter( 'wp_link_pages_link'array$this'inner_page_link_format' ), 10, 2 ); 
  14.  
  15.             add_filter( 'get_comments_pagenum_link'array$this'comment_page_link_format' ) ); 
  16.  
  17.             add_filter( 'redirect_canonical'array$this'cancel_redirect_for_paged_posts' ), 10, 2 ); 
  18.  
  19.         endif
  20.  
  21.         if( is_admin() ) : 
  22.  
  23.             add_filter( 'rewrite_rules_array'array$this'pagelink_rewrite_rules' ) ); 
  24.  
  25.             register_activation_hook( __FILE__array$this'flush_rewrite_rules' ) ) ; 
  26.  
  27.             register_deactivation_hook( __FILE__array$this'flush_rewrite_rules' ) ); 
  28.  
  29.         endif
  30.  
  31.     } 
  32.  
  33.     function flush_rewrite_rules(){ 
  34.  
  35.         flush_rewrite_rules(); 
  36.  
  37.     } 
  38.  
  39.     // 修改post分页链接的格式 
  40.  
  41.     function inner_page_link_format( $link$number ){ 
  42.  
  43.         if$number > 1 ){ 
  44.  
  45.             if( preg_match( '% 
  46.  
  47.                 $link = preg_replace( "%(/.html)/(/d*)%"$this->separator."$2$1"$link ); 
  48.  
  49.             } 
  50.  
  51.         } 
  52.  
  53.         return $link
  54.  
  55.     } 
  56.  
  57.      // 为新的链接格式增加重定向规则,移除原始分页链接的重定向规则,防止重复收录 
  58.  
  59.     function pagelink_rewrite_rules( $rules ){ 
  60.  
  61.         foreach ($rules as $rule => $rewrite) { 
  62.  
  63.             if ( $rule == '([0-9]+).html(/[0-9]+)?/?$' ) { 
  64.  
  65.                 unset($rules[$rule]); 
  66.  
  67.             } 
  68.  
  69.         } 
  70.  
  71.         $new_rule['([0-9]+)('.$this->separator.'([0-9]+))?.html/?$'] = 'index.php?p=$matches[1]&page=$matches[3]'
  72.  
  73.         return $new_rule + $rules
  74.  
  75.     } 
  76.  
  77.     // 禁止WordPress将页面分页链接跳转到原来的格式 
  78.  
  79.     function cancel_redirect_for_paged_posts( $redirect_url$requested_url ){ 
  80.  
  81.         global $wp_query
  82.  
  83.         if( is_single() && $wp_query->get( 'page' ) > 1 ){ 
  84.  
  85.             return false; 
  86. //Vevb.com 
  87.         } 
  88.  
  89.         return true; 
  90.  
  91.     } 
  92.  
  93.  
  94. new Rewrite_Inner_Page_Links_id(); 

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

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

/132/page-2.html

注:上述代码并没有评论分页的链接修正,本人无此刚需未做研究。

其它固定链接形式,需要安装rewrite rules inspector插件查看链接正则写法并修改上述代码。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表