海量素材、源码、软件、教程、资源

实时更新,建站资源,各种源码、素材、软件、课程、资源,自由下载



  • 注册
  • 查看作者
  • wordpress教程:修正设置伪静态后文章分页链接

    wordpress教程:修正设置伪静态后文章分页链接

    我们通常将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插件查看链接正则写法并修改上述代码。

    附:适合/%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’ ), 10, 2 ); // 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’ ), 10, 2 );
    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. [email protected]$link
    25. [email protected]$number
    26. [email protected]
    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. [email protected]$result
    39. [email protected]
    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.         ifstrpos$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. [email protected]$rules
    53. [email protected]
    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. [email protected]$redirect_url
    68. [email protected]$requested_url
    69. [email protected]
    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();
  • 0
  • 0
  • 0
  • 20
  • 请登录之后再进行评论

    登录
    聊天
    关注 1
    • 今日签到
    • 累计签到

    暂没有数据

  • 安逸
  • tcotu
  • an
    an
  • 发布
  • 任务
  • 动态
  • 到底部
  • 单栏布局 侧栏位置:
    关闭窗口
    下载海报