开发WordPress主题的时候,很多朋友喜欢做一个用户列表,来增加网站用户的活跃度,创建用户列表很简单,直接用get_users
功能就可以实现,可是当用户数量非常大的时候,所有用户在一个页面显示出来会造成这个页面打开的速度非常慢,这时候为用户列表增加一个分页功能就非常有必要了,很多朋友在实现分页功能的时候遇到了问题。今天我们接着创建用户列表分页的例子,来介绍一下 WordPress 的 paginate_links
函数。
首先我们需要查询并显示用户列表,顺便把分页需要的数据准备好
$number = 10; //每页显示的数量
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1; //当前第几页
$offset = ($paged - 1) * $number; //偏移量
$users = get_users(); //获取所有用户
$query = get_users('&offset='.$offset.'&number='.$number); //当前页面查询到的用户
$total_users = count($users); //用户总数
$total_query = count($query); //总查询数量
$total_pages = intval($total_users / $number) + 1; //总页数
foreach($query as $q) {
//列出用户
}
有了上面的数据,我们使用 paginate_links 功能显示分页
分页的原理就不需要多说了,需要的数据无非就是一个每页显示的数据量,总数据量和当前页数,这些数据我们在上面已经准备好了,我们只需要把这些参数传给 paginate_links
就可以了,当然,如果你非要写原始的 SQL 语句来查询,直接使用 wpdb 也是可以实现的。
if ($total_users > $total_query) {
echo '<div id="pagination" class="clearfix">';
echo '<span class="pages">Pages:</span>';
//从第一页和查询参数页中选一个最大的作为当前页数
$current_page = max(1, get_query_var('paged'));
//显示分页
echo paginate_links(array(
'base' => get_pagenum_link(1) . '%_%',
'format' => 'page/%#%/',
'current' => $current_page,
'total' => $total_pages,
'prev_next' => false,
'type' => 'list',
));
echo '</div>';
}
利用同样的方法,我们也可以实现 WordPress 分类标签列表分页功能,甚至在 WordPress 中自定义数据表的分页功能,也可以通过 paginate_links 函数实现。或者如果你比较熟悉用自己写的或者其他分页函数库,也是一样的原理和方法。