我們知道,WordPress 的文章列表和評(píng)論都是自帶分頁(yè)功能的,用戶列表分頁(yè)和分類(lèi)列表分頁(yè)也以很簡(jiǎn)單的實(shí)現(xiàn),其實(shí)只要知道了實(shí)現(xiàn)分頁(yè)功能的原理,一切皆可分頁(yè)。
實(shí)現(xiàn)分類(lèi)列表有兩個(gè)必須的數(shù)據(jù):$number 和 $offset 參數(shù),$number 是用來(lái)指定每頁(yè)顯示的數(shù)據(jù)數(shù)量,$offset 是用來(lái)計(jì)算從哪條數(shù)據(jù)開(kāi)始獲取。我們把這兩個(gè)數(shù)據(jù)傳遞給獲取分類(lèi)項(xiàng)目的函數(shù):get_terms,最終會(huì)實(shí)現(xiàn)類(lèi)似類(lèi)似 select * from wp_terms limit 10,20; 的 SQL 查詢,每次點(diǎn)擊下一頁(yè)時(shí),limit 后面的數(shù)字都會(huì)遞增,來(lái)查詢顯示下一頁(yè)的數(shù)據(jù)。
準(zhǔn)備分類(lèi)或標(biāo)簽數(shù)據(jù)
paginate_links 函數(shù)需要需要當(dāng)前頁(yè)數(shù)和最大頁(yè)數(shù)來(lái)計(jì)算分類(lèi)數(shù)據(jù),顯示分頁(yè)列表,而 get_terms 函數(shù)需要顯示數(shù)量 ($number) 和偏移量 ($offset) 數(shù)據(jù)兩個(gè)來(lái)獲取分類(lèi)數(shù)據(jù),實(shí)現(xiàn)上面說(shuō)的 SQL 查詢,我們通過(guò)下面的代碼把這些數(shù)據(jù)準(zhǔn)備好。
$taxonomy = 'post_tag';
$number = 100;
// 分頁(yè)參數(shù)
$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',
] );
通過(guò) paginate_links 函數(shù)實(shí)顯示分頁(yè)
有了上面準(zhǔn)備好的數(shù)據(jù),我們把數(shù)據(jù)傳遞給 paginate_links 函數(shù)就可以實(shí)現(xiàn)和文章列表分頁(yè)或者用戶列表分頁(yè)一樣的功能了。
$big = 999;
echo paginate_links( [
'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
'format' => '',
'current' => max( 1, $page ),
'total' => $totalpages,
'prev_text' => '上一頁(yè)',
'next_text' => '下一頁(yè)',
'type' => 'list',
'show_all' => false,
'end_size' => 3,
'mid_size' => 0,
] );
除了使用 WordPress 內(nèi)置的 paginate_links 函數(shù),我們也可以自己實(shí)現(xiàn)的分頁(yè)函數(shù)來(lái)實(shí)現(xiàn)效果更豐富的分頁(yè)功能。

