You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Timber框架:按自定义分类列出CPT文章的实现问题

按自定义分类法分组展示自定义文章类型内容

没问题,我来帮你搞定这个按分类展示车辆文章的需求!你之前的代码只是把所有vehicles文章一次性拉取出来,没有按vehicles_category分类分组,所以没法实现分类下罗列对应文章的效果。咱们分两步来解决:

第一步:后端PHP代码(传递分类及对应文章到模板)

修改你的上下文赋值代码,先获取目标分类,再逐个拉取每个分类下的文章,把分类和文章关联起来:

// 获取指定的vehicles_category分类(精准匹配你需要的四个分类)
$vehicle_categories = Timber::get_terms([
    'taxonomy' => 'vehicles_category',
    'slug' => ['construction', 'road', 'waste', 'other'],
    'orderby' => 'name',
    'order' => 'ASC'
]);

// 遍历分类,为每个分类绑定对应的文章
$grouped_vehicles = [];
foreach ($vehicle_categories as $category) {
    $category->posts = Timber::get_posts([
        'post_type' => 'vehicles',
        'posts_per_page' => -1,
        'order' => 'ASC',
        'tax_query' => [
            [
                'taxonomy' => 'vehicles_category',
                'field' => 'term_id',
                'terms' => $category->term_id
            ]
        ]
    ]);
    $grouped_vehicles[] = $category;
}

// 将分组后的数据传到模板上下文
$context['grouped_vehicles'] = $grouped_vehicles;

第二步:前端Twig模板代码(渲染分类及文章)

在你的Twig模板里,循环遍历分组后的分类数据,先输出分类名称,再罗列该分类下的文章:

{% for category in grouped_vehicles %}
    <h2>{{ category.name|title }}</h2> <!-- 首字母大写显示分类名称 -->
    <div class="vehicle-list">
        {% for post in category.posts %}
            <span><a href="{{ post.link }}">{{ post.title }}</a></span>
        {% else %}
            <span>暂无相关车辆文章</span>
        {% endfor %}
    </div>
{% endfor %}

补充小提示

  • 要是不需要限定那四个分类,可以删掉slug参数,这样会拉取所有vehicles_category分类
  • 文章排序规则可以按需调整,比如改成按发布日期排序:'orderby' => 'date'
  • 模板里的HTML结构可以根据你的页面样式自由修改,比如把span换成li或者其他标签

内容的提问来源于stack exchange,提问作者mfos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:50:26