问题描述

我想显示分页的归档页面,其中列出了我网站上的所有类别,每个链接都转到该特定的类别归档页面。所以这就像类别档案的归档页面。

我的网站上的每个类别都有一个手动创建的自定义缩略图,以匹配该类别的永久链接。我已经有一个布局设置显示所有的类别,但我正在做一个自定义的页面模板,所以没有分页。这意味着所有类别都显示在单个页面上,这是一个烦人的 (我有 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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。