在我们研究分页之前,根据我在您的问题中所学的内容,您只需要以下术语开头A
. 如果是,您可以使用name__like
中的参数get_terms
仅获取以开头的条款A
. 请注意,参数的操作在Wordpress V3中进行了更改。7,因此您需要应用以下过滤器才能使其按预期工作(归功于@s\\u ha\\u dum,请参见他的答案here. 注意:代码需要PHP 5.4+)
add_filter( \'terms_clauses\', function ($clauses)
{
remove_filter( \'term_clauses\', __FUNCTION__ );
$pattern = \'|(name LIKE )\\\'%(.+%)\\\'|\';
$clauses[\'where\'] = preg_replace($pattern,\'$1 \\\'$2\\\'\',$clauses[\'where\']);
return $clauses;
});
$terms = get_terms( \'ownwer\' [\'name__like\' => \'A\'] );
要为术语列表分页,我们需要:
当前页码
列表中的术语总数
总共有多少页
获取当前页面或任何页面的页码很容易。这将适用于所有页面,包括静态首页和单帖页面
if ( get_query_var( \'paged\' ) ) {
$current_page = get_query_var( \'paged\' );
} elseif ( get_query_var( \'page\' ) ) {
$current_page = get_query_var( \'page\' );
} else {
$current_page = 1;
}
我们现在需要知道分类法中术语的总量。在这里,我们可以使用
wp_count_terms()
, 其中使用
get_terms()
或使用
get_terms()
它本身请记住,如果我们使用筛选器按特定字母/名称获取术语,则该筛选器将应用于此运行
get_terms()
/
wp_count_terms()
我们正在利用闭包
$terms_count = get_terms( \'owner\', [\'name__like\' => \'A\', \'fields\' => \'count\'] );
现在我们有了符合我们标准的条款总数。记住,如果你要使用
wp_count_terms()
, 只需记住设置
hide_empty
如果不需要包括空术语,则为true。默认情况下,
wp_count_terms()
将此设置为
false
现在我们可以计算最大页数
// Set the amount of terms we need to display per page
$terms_per_page = 10;
// Get the total amount of pages
$max_num_pages = $terms_count / $terms_per_page;
要获取到下一页和上一页的分页链接,非常简单。分页函数从任何查询中唯一需要知道的是最大页数,而不是其他。它不需要知道应该分页什么。所以我们可以简单地使用
next_posts_link()
和
previous_posts_link()
功能。您还可以使用
paginate_links()
甚至可以编写自己的函数来满足您的需要。记住要通过
$max_num_pages
作为分页功能的最大页数
next_posts_link( \'Next terms\', $max_num_pages );
previous_posts_link( \'Previous terms\' );
我们唯一需要做的就是分页
get_terms()
, 这也很容易。我们将利用
offset
用于根据第页和第页偏移术语的参数
number
获取每页所需的条款数量
// Calculate offset
$offset = ( $current_page == 1) ? 0 : ( ($current_page - 1) * $terms_per_page );
// Setup our arguments
$args = [
\'number\' => $terms_per_page,
\'offset\' => $offset
];
我们现在可以把所有的东西放在一起了
在我们开始之前,有几个重要的注意事项
所有代码都未经测试
该代码至少需要PHP 5.4,这是您在撰写本文时应该运行的最低PHP版本
根据需要修改并撕开
最后,这是代码
add_filter( \'terms_clauses\', function ($clauses)
{
remove_filter( \'term_clauses\', __FUNCTION__ );
$pattern = \'|(name LIKE )\\\'%(.+%)\\\'|\';
$clauses[\'where\'] = preg_replace($pattern,\'$1 \\\'$2\\\'\',$clauses[\'where\']);
return $clauses;
});
$taxonomy = \'owner\';
$terms_count = get_terms( $taxonomy, [\'name__like\' => \'A\', \'fields\' => \'count\'] );
if ( $terms_count && !is_wp_error( $terms ) ) {
if ( get_query_var( \'paged\' ) ) {
$current_page = get_query_var( \'paged\' );
} elseif ( get_query_var( \'page\' ) ) {
$current_page = get_query_var( \'page\' );
} else {
$current_page = 1;
}
// Set the amount of terms we need to display per page
$terms_per_page = 10;
// Get the total amount of pages
$max_num_pages = $terms_count / $terms_per_page;
// Calculate offset
$offset = ( $current_page == 1) ? 0 : ( ($current_page - 1) * $terms_per_page );
// Setup our arguments
$args = [
\'number\' => $terms_per_page,
\'offset\' => $offset,
\'name__like\' => \'A\'
];
$terms = get_terms( $taxonomy, $args );
// Do what you need to do with $terms
next_posts_link( \'Next terms\', $max_num_pages );
previous_posts_link( \'Previous terms\' );
}