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

发布时间:2020-05-07

我们通常将wordpress固定链接设为/%postname%.html或者/%post_id%.html,可以让页面看起来像静态页,但当文章有分页时,分页链接会变得奇怪,比如:

/morning-paper-news.html/3

/132.html/2

html既然是后缀就应该一直在最后,来自solagirl的《用.html作为url后缀时的分页链接问题》一文,为我们提供了解决办法。

不过原代码只提供了/%postname%.html的修改方法。

本文提供一下/%post_id%.html的修改方法。

修正WordPress 设置伪静态后文章分页链接 1wordpress 设置伪静态后文章分页链接” />

将下面代码添加到当前主题 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

演示链接

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

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

附:适合/%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();

大熊wordpress凭借多年的wordpress企业主题制作经验,坚持以“为用户而生的wordpress主题”为宗旨,累计为2000多家客户提供品质wordpress建站服务,得到了客户的一致好评。我们一直用心对待每一个客户,我们坚信:“善待客户,将会成为终身客户”。大熊wordpress能坚持多年,是因为我们一直诚信。我们明码标价(wordpress做网站需要多少钱),从不忽悠任何客户,我们的报价宗旨:“拒绝暴利,只保留合理的利润”。如果您有网站建设、网站改版、网站维护等方面的需求,请立即咨询右侧在线客服或拨打咨询热线:18324743309,我们会详细为你一一解答你心中的疑难。

相关文章

写给所有做网站的朋友的一封信

写给所有做网站的朋友的一封信

现在就开始执行“1+N”互联网推广和没有开始执行的人,一两天看不出任何区别; 一两个月看来差异也是微乎其微的;但在2-5年的长远时间来看的时候,你的高质量询盘不断增加,你的互联网资产已经建立完成,对手已经很难匹敌,现在你看到这段文字的时候就是最好的开始,现在就是最好的时候,马上开始“1+N”体系的整体互联网推广吧,我们和你一起,开创互联网大未来!

点击查看详情

准备开启WordPress网站建设推广?

我们相信高端漂亮的网站不应该是昂贵的,这就是wordpress对每个人都是免费的原因
wordpress建站免费入门,并提供价格合理的wordpress建站套餐。