使用 paginate_links 函数实现 WordPress 分类标签分页功能

文 / @WordPress主题

分页功能的实现原理

我们知道,WordPress的文章列表和评论都是自带分页功能的,用户列表分页和分类列表分页也以很简单的实现,其实只要知道了实现分页功能的原理,一切皆可分页。

实现分类列表有两个必须的数据:$number$offset参数,$number是用来指定每页显示的数据数量,$offset是用来计算从哪条数据开始获取。我们把这两个数据传递给获取分类项目的函数:get_terms,最终会实现类似类似select*fromwp_termslimit10,20;的SQL查询,每次点击下一页时,limit后面的数字都会递增,来查询显示下一页的数据。

准备分类或标签数据

paginate_links函数需要需要当前页数和最大页数来计算分类数据,显示分页列表,而 get_terms函数需要显示数量($number)和偏移量($offset)数据两个来获取分类数据,实现上面说的SQL查询,我们通过下面的代码把这些数据准备好。

$taxonomy='post_tag';
$number=100;

//分页参数
$page=(get_query_var('paged'))?get_query_var('paged'):1;
$offset=($page>0)?$number*($page-1):1;
$totalterms=wp_count_terms($taxonomy,['hide_empty'=>true]);
$totalpages=ceil($totalterms/$number);

$tags=get_terms([
'taxonomy'=>$taxonomy,
'orderby'=>'name',
'order'=>'ASC',
'hide_empty'=>true,
'fields'=>'all',
'number'=>$number,
'offset'=>$offset,
'cache_domain'=>'core',
]);

有了上面准备好的数据,我们把数据传递给paginate_links函数就可以实现和文章列表分页或者用户列表分页一样的功能了。

$big=999;

echopaginate_links([
'base'=>str_replace($big,'%#%',esc_url(get_pagenum_link($big))),
'format'=>'',
'current'=>max(1,$page),
'total'=>$totalpages,
'prev_text'=>'上一页',
'next_text'=>'下一页',
'type'=>'list',
'show_all'=>false,
'end_size'=>3,
'mid_size'=>0,
]);

除了使用WordPress内置的 paginate_links 函数,我们也可以自己实现的分页函数来实现效果更丰富的分页功能。

添加UTHEME为好友
扫码添加UTHEME微信为好友
· 分享WordPress相关技术文章,主题上新与优惠动态早知道。
· 微信端最大WordPress社群,限时免费入群。