脱离插件,实现WordPress主题分页功能

越少的使用插件,却能让使用者完全体验到主题的各项功能,才是真正好的主题,这也是所有主题设计者应考虑的问题,本站目前的新主题基本实现了零插件。网上不使用插件实现WordPress功能的文章也很多,之前我也写过WordPress相关日志函数一文,今天再补一个不使用插件实现翻页功能的函数代码。

WordPress默认翻页功能很弱,一页页翻,弄到你手麻,所以类似wp-pagenavi翻页插件,几乎是WordPress博客必装的插件,也是普及率很高的一款插件。

虽然网上有如何把wp-pagenavi插件集成到WordPress主题的教程,但wp-pagenavi插件函数代码拖沓,只是变相启用插件而已,并没有真正脱离wp-pagenavi插件。下面一段轻量级的函数,加上寥寥数行css样式就可以完全替代分页插件了。

具体实现方法:

首先将下面一段函数代码添加到主题的functions.php模板文件中:

function pagination($query_string){
global $posts_per_page, $paged;
$my_query = new WP_Query($query_string .“&posts_per_page=-1”);
$total_posts = $my_query->post_count;
if(empty($paged))$paged = 1;
$prev = $paged 1;
$next = $paged + 1;
$range = 2; // only edit this if you want to show more page-links
$showitems = ($range * 2)+1;
 
$pages = ceil($total_posts/$posts_per_page);
if(1 != $pages){
echo “<div class=’pagination’>”;
echo ($paged > 2 && $paged+$range+1 > $pages && $showitems < $pages)?
<a href='”.get_pagenum_link(1).“‘>最前</a>”:“”;
echo ($paged > 1 && $showitems < $pages)?
<a href='”.get_pagenum_link($prev).“‘>上一页</a>”:“”;
 
for ($i=1; $i <= $pages; $i++){
if (1 != $pages &&( !($i >= $paged+$range+1 ||
    $i <= $paged$range1) || $pages <= $showitems )){
echo ($paged == $i)? “<span class=’current’>”.$i.“</span>”:
“<a href='”.get_pagenum_link($i).“‘ class=’inactive’ >”.$i.“</a>”;
}
}
 
echo ($paged < $pages && $showitems < $pages) ?
“<a href='”.get_pagenum_link($next).“‘>下一页</a>” :“”;
echo ($paged < $pages1 &&  $paged+$range1 < $pages && $showitems < $pages) ?
“<a href='”.get_pagenum_link($pages).“‘>最后</a>”:“”;
echo “</div>\n”;
}
}

接下来用下面的代码替换原来模板中默认翻页代码或分页插件代码:

  1. <?php pagination($query_string); ?>  

最后再把下面的样式代码添加到style.css中,刷新一下页面,与使用插件实现的翻页效果一样。

.pagination{
overflow:hidden;width:100%;text-align:center
}
.pagination span,
.pagination a{
height:36px;border:1px solid #DDD;-webkit-border-radius:12px;-moz-border-radius:12px;border-radius:12px;color:#EEE567;text-decoration:none;line-height:36px;margin:2px;padding:3px 8px;
}
.pagination a:hover{
background: #8391A7;
border:1px solid #fff;
color:#fff;
}
.pagination .current{
border:1px solid #FFBB76;color:#FF7200;font-weight:bolder
}

发表评论

电子邮件地址不会被公开。 必填项已用*标注