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

知更鸟
知更鸟
知更鸟
站长
2558
文章
0
粉丝
WordPress14511,691阅读模式

我们通常将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中:

// 适合/%post_id%.html分页链接修正
class Rewrite_Inner_Page_Links_id{
	var $separator;
	function __construct(){
		$this->separator = '/page-';
		if( !is_admin() || defined( 'DOING_AJAX' ) ) :
			add_filter( 'wp_link_pages_link', array( $this, 'inner_page_link_format' ), 10, 2 );
			add_filter( 'get_comments_pagenum_link', array( $this, 'comment_page_link_format' ) );
			add_filter( 'redirect_canonical', array( $this, 'cancel_redirect_for_paged_posts' ), 10, 2 );
		endif;
		if( is_admin() ) :
			add_filter( 'rewrite_rules_array', array( $this, 'pagelink_rewrite_rules' ) );
			register_activation_hook( __FILE__, array( $this, 'flush_rewrite_rules' ) ) ;
			register_deactivation_hook( __FILE__, array( $this, 'flush_rewrite_rules' ) );
		endif;
	}
	function flush_rewrite_rules(){
		flush_rewrite_rules();
	}
	// 修改post分页链接的格式
	function inner_page_link_format( $link, $number ){
		if( $number > 1 ){
			if( preg_match( '%<a href=".*\.html/\d*"%', $link ) ){
				$link = preg_replace( "%(\.html)/(\d*)%", $this->separator."$2$1", $link );
			}
		}
		return $link;
	}
	// 为新的链接格式增加重定向规则,移除原始分页链接的重定向规则,防止重复收录
	function pagelink_rewrite_rules( $rules ){
		foreach ($rules as $rule => $rewrite) {
			if ( $rule == '([0-9]+).html(/[0-9]+)?/?$' ) {
			unset($rules[$rule]);
			}
		}
		$new_rule['([0-9]+)('.$this->separator.'([0-9]+))?.html/?$'] = 'index.php?p=$matches[1]&page=$matches[3]';
		return $new_rule + $rules;
	}
	// 禁止WordPress将页面分页链接跳转到原来的格式
	function cancel_redirect_for_paged_posts( $redirect_url, $requested_url ){
		global $wp_query;
		if( is_single() && $wp_query->get( 'page' ) > 1 ){
			return false;
		}
		return true;
	}
}
new Rewrite_Inner_Page_Links_id();

提示:添加代码后,需要保存一下固定链接设置。

之后再次打开文章分页链接,会变成类似的:

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

/132/page-2.html

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


应网友要求补一个:/%category%/%post_id%.html格式的

貌似这种格式也经常有人问,这里就提供一下修改方法:

将上述代码中第36行:

$new_rule['([0-9]+)('.$this->separator.'([0-9]+))?.html/?$'] = 'index.php?p=$matches[1]&page=$matches[3]';

改为:

$new_rule['[^/]+/([0-9]+)('.$this->separator.'([0-9]+))?.html/?$'] = 'index.php?p=$matches[1]&page=$matches[3]';

只是加了个[^/]+/

最后分页形式是:

分类名称/132/page-2.html

添加修改上述代码后,不要忘记到后台保存一下固定链接设置,否则不会生效!


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

有主题用户问,为什么不集成到主题中?原因很简单,大家的固定链接形式各不相同,这段代码没有通用性,而且还是有很多BUG,如自定义分类法文章就无法使用,添加上述代码后,可能文章都无法打开...

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

展开收缩
// 修复.html分页链接
class Rewrite_Inner_Page_Links{
	var $separator;
	function __construct(){
		$this->separator = '/page-';
		if( !is_admin() || defined( 'DOING_AJAX' ) ) :
			add_filter( 'wp_link_pages_link', array( $this, 'inner_page_link_format' ), 10, 2 ); // for inner pages
			add_filter( 'get_comments_pagenum_link', array( $this, 'comment_page_link_format' ) );
			add_filter( 'redirect_canonical', array( $this, 'cancel_redirect_for_paged_posts' ), 10, 2 );
		endif;
		if( is_admin() ) :
			add_filter( 'rewrite_rules_array', array( $this, 'pagelink_rewrite_rules' ) );
			register_activation_hook( __FILE__, array( $this, 'flush_rewrite_rules' ) ) ;
			register_deactivation_hook( __FILE__, array( $this, 'flush_rewrite_rules' ) );
		endif;
	}
	function flush_rewrite_rules(){
		flush_rewrite_rules();
	}
    /**
	* 修改post分页链接的格式
	* @param string $link
	* @param int $number
	* @return string
	*/
	function inner_page_link_format( $link, $number ){
		if( $number > 1 ){
			if( preg_match( '%<a href=".*\.html/\d*"%', $link ) ){
				$link = preg_replace( "%(\.html)/(\d*)%", $this->separator."$2$1", $link );
			}
	}
		return $link;
	}
	/**
	* 修改评论分页链接
	* @param string $result
	* @return string
	*/
	function comment_page_link_format( $result ){
		// From hello-world.html/comment-page-1#comments to hello-world/comment-page-1.html#comments
		if( strpos( $result, '.html/' ) !== false ){
			$result = preg_replace( '=([^/]+)(.html)/comment-page-([0-9]{1,})=', "$1/comment-page-$3$2" ,$result );
		}
		return $result;
	}
	/**
	* 为新的链接格式增加重定向规则,移除原始分页链接的重定向规则,防止重复收录
	*
	* 访问原始链接将返回404
	* @param array $rules
	* @return array
	*/
	function pagelink_rewrite_rules( $rules ){
		foreach ($rules as $rule => $rewrite) {
			if ( $rule == '([^/]+).html(/[0-9]+)?/?$' || $rule == '([^/]+).html/comment-page-([0-9]{1,})/?$' ) {
				unset($rules[$rule]);
			}
		}
		$new_rule['([^/]+)('.$this->separator.'([0-9]+))?.html/?$'] = 'index.php?name=$matches[1]&page=$matches[3]';
		$new_rule['([^/]+)/comment-page-([0-9]{1,}).html(\#[^\s])?$'] = 'index.php?name=$matches[1]&cpage=$matches[2]';
		return $new_rule + $rules;
	}
	/**
	* 禁止WordPress将页面分页链接跳转到原来的格式
	* @param string $redirect_url
	* @param string $requested_url
	* @return bool
	*/
	function cancel_redirect_for_paged_posts( $redirect_url, $requested_url ){
		global $wp_query;
		if( is_single() && $wp_query->get( 'page' ) > 1 ){
			return false;
		}
		return true;
	}
}
new Rewrite_Inner_Page_Links();

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

打开No category parents插件no-category-parents.php文件,在大约54行找到:

  1. //if ( ! isset( $rules['(.+?)-cat/?$'] ) ) { // have to comment this in order to refresh the rules
  2.     global $wp_rewrite;
  3.     $wp_rewrite->flush_rules();
  4. //}

去掉注释,改为:

  1. if ( ! isset( $rules['(.+?)-cat/?$'] ) ) { // have to comment this in order to refresh the rules
  2.     global $wp_rewrite;
  3.     $wp_rewrite->flush_rules();
  4. }

不过还真不知道这句默认注释掉的用处,经测试未发现有什么问题。

如果不想用rewrite rules inspector插件查看链接规则,可以将下面代码添加到主题functions.php中,之后打开固定链接设置页面会看到链接规则。

add_filter( 'rewrite_rules_array', 'show_rewrite_rules' ); 
function show_rewrite_rules( $rules ) {
  echo nl2br( var_export( $rules, true ) );
  die;
}

 

本站文章大部分为原创,用于个人学习记录,可能对您有所帮助,仅供参考!

weinxin
我的微信
微信号已复制
版权声明
本站原创文章转载请注明文章出处及链接,谢谢合作!
 
知更鸟
  • WordPress
  • functions.php
评论  145  访客  139  作者  6
    • BanYuner
      BanYuner

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

      • 站长萌萌哒
        站长萌萌哒

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

        • 今日新闻头条
          今日新闻头条

          文章不错感谢分享

          • 懿古今
            懿古今

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

            • 优选汇
              优选汇

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

              • 我爱动感单车网
                我爱动感单车网

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

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

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

                  • 的范德萨发
                    的范德萨发

                    第三方第三方

                    • 趣果网
                      趣果网

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

                      • 趣果网
                        趣果网

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

                        • 爱的翅膀
                          爱的翅膀

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

                          • 野人摊影视分享
                            野人摊影视分享

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

                            • 今日新闻头条
                              今日新闻头条

                              文章不错支持一下吧

                              • 米扑博客
                                米扑博客

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

                                • 书法
                                  书法

                                  这个还是很有用的

                                  • 新闻头条
                                    新闻头条

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

                                    • 童话故事
                                      童话故事

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

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

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

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

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

                                      • 明月登楼
                                        明月登楼

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

                                        • 热腾网
                                          热腾网

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

                                          • 科技Fans
                                            科技Fans

                                            :wink: 祝 鸟哥越更越年轻

                                            • 仙城博客
                                              仙城博客

                                              一如既往的懒啊 懒得折腾

                                              • 灰常记忆
                                                灰常记忆

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

                                                • sys
                                                  sys

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

                                                  • nnnncccc
                                                    nnnncccc

                                                    挺好的

                                                    • 丐帮刘德华
                                                      丐帮刘德华

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

                                                      • 博客之家
                                                        博客之家

                                                        折腾来、折腾去、对网站排名有影响吧。

                                                        • 两天
                                                          两天

                                                          我去试试~~~

                                                          • 给大家 吗
                                                            给大家 吗

                                                            媳妇不知道吧知道是S官方W阿W

                                                            • 112
                                                              112

                                                              谢谢分享

                                                                • 开门
                                                                  开门

                                                                  @ 112 ss也来折腾一下

                                                                • 折腾
                                                                  折腾

                                                                  也来折腾一下

                                                                  • 明月登楼
                                                                    明月登楼

                                                                    很少用到文章分页的!

                                                                    • 明月登楼
                                                                      明月登楼

                                                                      我倒是想知道如何伪静态化评论的链接,以方便又拍云的缓存!

                                                                      • VPS日报
                                                                        VPS日报

                                                                        不错,可以使分页链接更美观,跟其它页面链接格式统一

                                                                        • 开门
                                                                          开门

                                                                          我是来看代码的

                                                                          • 西蜀帝王
                                                                            西蜀帝王

                                                                            新手一枚,这个问题看了阁下教程后完美解决了,谢谢

                                                                            • mbxl
                                                                              mbxl

                                                                              谢谢分享,好文章

                                                                              • mbxl
                                                                                mbxl

                                                                                折腾了老关天还是不行

                                                                                • Mama ha ha
                                                                                  Mama ha ha

                                                                                  做个博客可真麻烦啊

                                                                                  • 123
                                                                                    123

                                                                                    修改了半天没用。。

                                                                                    • 星

                                                                                      谢谢分享

                                                                                      • 铁路客流量
                                                                                        铁路客流量

                                                                                        学习了,感谢!!!!

                                                                                        • mbxl
                                                                                          mbxl

                                                                                          谢谢分享

                                                                                          • 代写论文
                                                                                            代写论文

                                                                                            感谢楼主的分析

                                                                                            • 宅

                                                                                              不知道是哪个代码会造成冲突,所以还是回复下好

                                                                                              • 我来看看
                                                                                                我来看看

                                                                                                看看是什么好不好

                                                                                                • leyna
                                                                                                  leyna

                                                                                                  :roll: :arrow: :neutral: :cry: :cry: 我要试试

                                                                                                  • 123
                                                                                                    123

                                                                                                    中文评论

                                                                                                      • 开门
                                                                                                        开门

                                                                                                        @ 123 8e08b8b4db13ca685cce333210d620ce好

                                                                                                      • ff
                                                                                                        ff

                                                                                                        的有道理,总是折腾,就是没排名,呵呵

                                                                                                        • 天地汇
                                                                                                          天地汇

                                                                                                          改不改问题应该不大吧?

                                                                                                          • MissPatina
                                                                                                            MissPatina

                                                                                                            测试下评论效果。

                                                                                                          匿名

                                                                                                          发表评论

                                                                                                          匿名网友

                                                                                                          拖动滑块以完成验证