二.优化分页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则无需修改。其实此代码还有优化的方法,限于时间所限,先将以上成果呈现给大家。