二.优化分页URL程序

更改分页URL需要修改两大部分程序,示例使用的固定链接格式是“/%post_id%.html”,也就是文章id后跟html,如https://fenginfo.com/1638.html,添加分页生成的格式是“文章id_分页.html”,例如https://fenginfo.com/1638_2.html 。如果不是以上格式,以下程序请修改后使用。

首先在当前使用主题的functions.php文件中添下如下代码,添加时请注意<?php 和 ?>的闭合。代码包含设定三个钩子及实现的三个函数,三个钩子设置语句(add_filter)也可放进主题实现init钩子的函数中。

<?php
//解析url的钩子
add_filter('post_rewrite_rules', 'add_custom_post_rewrite_rules');
//设置url钩子
add_filter('wp_link_pages_link', 'post_custom_rewrite_url');
//不许跳转
add_filter( 'redirect_canonical',  'post_custom_redirect_url');

function add_custom_post_rewrite_rules($rules) {
$custom_rules = array('(d+)_(d+).html$' => 'index.php?p=$matches[1]&page=$matches[2]',);
$rules = array_merge($custom_rules, $rules);
return $rules;
}


function post_custom_rewrite_url($output){
$preg =  "/(.*)/(d+).html/(d)/";
$output = preg_replace($preg, "$1/$2_$3.html", $output);

return $output;
}
 

function post_custom_redirect_url($output){
return false;
}
?>

以上设好后,可进行检查,将后台固定链接的参数刷新一下,如链接参数设置部分添加一个空格再删除,然后保存。此时找一个有分页的文章就可以测试,如https://fenginfo.com/1638_2.html 。

以上如果测试成功,如果single.php还是原先程序,则各分页跳转的url还是原先模样(如1638.html/2,还可以跳转正确),故需将fz_link_pages重写改写,程序如下。

<?php 
function fz_link_pages() {
	global $page, $numpages, $multipage, $more;

	if(!$multipage){return;} ?>
	<div><nav><ul class="pagination">
<?php
	if($page > 1){
		echo '<li>'.fz_changeurl(_wp_link_page($page - 1)).__( 'Previous page' ).'</a></li>';
	}else{
		echo '<li class="disable"><a>'.__( 'Previous page' ).'</a></li>';
	}
	for ( $i = 1; $i <=$numpages; $i++ ) {
		if($i == $page){
			echo '<li class="active"><a>'.$i.'</a></li>';
		}else{
			echo '<li>'.fz_changeurl(_wp_link_page($i)).$i.'</a></li>';
		}
	}
	if($page < $numpages){
		echo '<li>'.fz_changeurl(_wp_link_page($page + 1)).__( 'Next page' ).'</a></li>';
	}else{
		echo '<li class="disable"><a>'.__( 'Next page' ).'</a></li>';
	}
?>	
	</ul></nav></div>
<?php
}

function fz_changeurl($url){
	sscanf($url,'<a href="/%d.html/%d">',$a,$b);
	if($b <1){return $url;}else{return '<a href="/'.$a.'_'.$b.'.html">';}
}
?>

以上程序修改部分就是将_wp_link_page返回的分页url通过fz_changeurl函数进行改写,这段代码是根据域名、固定链接格式特定的,无法写进可共享的主题或插件中,各位可根据需要自行修改。fz_changeurl函数的原理是将原有分页url通过sscanf得到文章id和分页号,然后再进行组合成新的url,如果页面为1则无需修改。其实此代码还有优化的方法,限于时间所限,先将以上成果呈现给大家。

发表回复

Post Navigation