给你的WordPress自定义分页
WordPress自带的分页不好用,只有上一页,下一页。感觉不爽,google了几下,分页插件倒是有,下过来想安装,但感觉代码太多,看了一下 wp-pagenavi 的分页插件,发现它怎么没写SQL,原来是我白痴了一回,$request = $wp_query->request;就能得到,而且$wp_query->max_num_pages就能得到最多页数,有了这个参数,自己写完全没有问题。于是瞎捣鼓写了一个分页。
效果如我博客分页一致,最多显示5个页码,也就是1 2 3 4 5,2 3 4 5 6,3 4 5 6 7这种。那这种分页有三种情况:
- 少于或者等于5页时,始终显示1 2 3 4 5
- 页数在最后3个页数时,始终显示最后5页
- 其他都是加2减2
- 附加功能,显示 首页 上一页 下一页 末页,情况在不是第一页和最后一个
那么就可以动手写了。
function mj_pagenav() {
global $wpdb, $wp_query;
if (!is_single()) {
$CycNum = 5; //最多页数
$maxPage = $wp_query->max_num_pages; //最多页数
$paged = intval(get_query_var('paged')) === 0 ? 1 : intval(get_query_var('paged')) ; //paged=? 参数
$Button = array("首页","上一页","下一页","未页");
if($paged - 2 <= 1){
$FirstNum = 1;
$LastNum = min($maxPage, $CycNum);
}elseif($maxPage - $paged <= 2){
$FirstNum = ($maxPage - 4 == 0) ? 1 : ($maxPage - 4);
$LastNum = $maxPage;
}else{
$FirstNum = $paged - 2;
$LastNum = $paged + 2;
}
//输出 首页 上一页
echo ( 1 >= $paged ) ? ''
: '<a href="' .get_option('siteurl') . '/">' . $ButtonArray[0] . '</a>
<a href="' .get_option('siteurl') . '/page/' . ($paged - 1) . '/">' . $ButtonArray[1] . '</a>';
//输出 页码
for($i = $FirstNum; $i <= $LastNum; $i++){
if ( $i == $paged ){
$pageText = '<a href="' .get_option('siteurl') . '/page/' . $i . '/"><em>' . $i . '</em></a>';
}else{
$pageText = '<a href="' .get_option('siteurl') . '/page/' . $i . '/">' . $i . '</a>';
}
echo $pageText;
}
//输出 下一页 末页
echo ($max_page == $paged ) ? ''
: '<a href="' .get_option('siteurl') . '/page/' . ($paged + 1) . '/">'. $ButtonArray[2] .'</a>
<a href="' .get_option('siteurl') . '/page/' . ($max_page) . '/">'. $ButtonArray[3] .'</a>';
}
}
代码比较简单,“上一页 下一页” 我都整在一行,将就着看。把mj_pagenav()放到该放的地方,简单的分页就弄好了,复杂的分页就再加几行代码(我这里把/page/xx写死了,只适应首页哈,搜索和存档等其它页的分页有空再改一下,-__-)。