• 欢迎访问乐趣公园网站,WordPress信息,WordPress教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入乐趣公园 QQ群
  • Git主题现已支持滚动公告栏功能,兼容其他浏览器,看到的就是咯,在后台最新消息那里用li标签添加即可。
  • 最新版Git主题已支持说说碎语功能,可像添加文章一样直接添加说说,新建说说页面即可,最后重新保存固定连接,演示地址
  • 百度口碑求点赞啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊http://koubei.baidu.com/s/.me
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏乐趣公园吧

WORDPRESS 用.HTML作为URL后缀时的分页链接问题

未分类 飞飞 451次浏览 0个评论

固定链接设为 /archives/%postname%.html 时可以让页面看起来像静态页,同时会使分页链接变得十分奇怪,比如评论的分页链接会变成”hello-world.html/comment-page-1#comments”,html既然是后缀就应该一直在最后,本文介绍如何实现。

目标

假设页面链接为hello-world.html

当在文章中插入分页时,希望分页链接格式为 hello-world/page-2.html

评论分页链接则为 hello-world/comment-page-2.html

实现方法

  1. 通过filter将分页链接改成希望的格式,分别用到vwp_link_pages_link get_comments_pagenum_link
  2. 添加自定义跳转规则,利用filter rewrite_rules_array
  3. 取消Canonical URL(标准链接)跳转,否则使用新链接访问时WordPress会强制跳转到原来的链接

代码

下面这段代码放在主题的functions.php中,保存后需要到设置中重新保存一下固定链接

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

本代码适用于固定链接格式为/archives/%postname%.html,若固定格式不同需要作相应修改,修改方法见下文。

若固定链接格式为/%postname%.html,请修改规则,将

  1. $this->post_rule = 'archives/([^/]+)('.$this->separator.'([0-9]+))?.html/?$';
  2. $this->comment_rule = 'archives/([^/]+)/comment-page-([0-9]{1,}).html(\#[^\s])?$';

改为

  1. $this->post_rule = '([^/]+)('.$this->separator.'([0-9]+))?.html/?$';
  2. $this->comment_rule = '([^/]+)/comment-page-([0-9]{1,}).html(\#[^\s])?$';

本文介绍的方法演示了修改固定链接格式、并添加新Rewrite rules的方法,适用于其他情况。例如修改custom post type的固定链接,不同的是用哪个filter来修改链接输出格式。

原文出自:http://www.solagirl.net/permalink-with-html-suffix.html,感谢原作者 Sola!


乐趣公园 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明WORDPRESS 用.HTML作为URL后缀时的分页链接问题
喜欢 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址