问题描述
我想显示分页的归档页面,其中列出了我网站上的所有类别,每个链接都转到该特定的类别归档页面。所以这就像类别档案的归档页面。
我的网站上的每个类别都有一个手动创建的自定义缩略图,以匹配该类别的永久链接。我已经有一个布局设置显示所有的类别,但我正在做一个自定义的页面模板,所以没有分页。这意味着所有类别都显示在单个页面上,这是一个烦人的 (我有 100 多个类别) 。
我的当前存档是使用特定的自定义页面模板名称 page-catlist.php
设置的,但我愿意将其更改为任何其他类型的模板文件。
以下是我用于在一个页面上输出所有类别的当前代码:
$args = array(
'orderby' => 'name',
'order' => 'ASC'
);
$cats = get_categories( $args );
$thm_pre = 'http://example.com/images/thumbs/';
$thm_end = '.png';
foreach($cats as $cat) {
$thumbnail = $thm_pre.$cat->slug.$thm_end;
// output the loop HTML here
// basically a list of category names & thumbs
// all linked to the cat URL by get_category_link()
}
我希望有一个更好的方式来做到这一点,所以我可以添加自然分页,理想情况下与 WP-PageNavi 。任何帮助将不胜感激!
最佳解决方案
分类术语/类别/标签列表是非常容易的,为了实现这一点,您需要最少的信息。
让我们看看我们的需要
-
数量
-
每页的数量
-
get_terms()
(请注意,版本 4.5 中get_terms()
的用法已更改) 。您也可以使用get_categories()
,如果你愿意,get_categories()
只是get_terms()
的包装功能
所以首先我们需要计算一些术语数量。为此,我们将在 get_terms()
中使用 count
参数
注意:
-
所有代码未经测试,至少需要
-
PHP 5.4
-
WordPress 4.5
-
您可以轻松地将其转换为使用旧版本的 PHP 和 WordPress
$taxonomy = 'category';
$term_count = get_terms(
[
'taxonomy' => $taxonomy,
'fields' => 'count'
]
);
现在我们知道这些数量,我们可以设置每页需要的数量,让我们说 10
$terms_per_page = 10;
从上面我们现在可以找出我们将有多少页面。这里的值将传递给需要的分页功能,在您的情况下,wp_pagenavi()
$max_num_pages = ceil( $term_count/$terms_per_page );
在这种情况下,您将通过 $max_num_pages
到您的分页功能
下一部分将是计算我们的偏移量。我们只想检索每页的相关数量的数量以保持优化。我们不需要每页 100 多个字。仅查询所需的 10 快得多。所以,我们需要知道我们在哪个页面,从那里我们将计算一个偏移量。这将被传递给 get_terms()
,并会告诉 get_terms()
从起始起点跳过多少条目。
一旦有了,我们也必须告诉 get_terms()
只返回 10 个术语。让我们来看看这段代码
$current_page = get_query_var( 'paged', 1 ); // Change to 'page' for static front page
$offset = ( $terms_per_page * $current_page ) - $terms_per_page;
$terms = get_terms(
[
'taxonomy' => $taxonomy,
'order' => 'ASC',
'orderby' => 'name',
'number' => $terms_per_page,
'offset' => $offset
]
);
根据分页,每页只能有 10 个术语。您现在可以通过您的条款正常循环
只需一个注释,您就可以确保您实际上具有从 get_terms()
功能返回的术语。
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。