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

请求指导创建含底层文章的三级自定义分类层级列表

实现自定义分类法三级层级术语列表(含底层术语文章)

我明白你想要的效果:自定义分类法下的三级术语层级,只有最底层的第三级术语才附带显示最多10篇关联文章,上层的一级、二级只展示术语本身。wp_list_categories确实没法直接实现这个需求,咱们用自定义递归函数来搞定,灵活性更高。

核心思路

  1. 先获取自定义分类法的所有顶级术语(父级为0的术语)
  2. 递归遍历每个术语,跟踪当前层级深度
  3. 当遍历到第三级(底层)术语时,查询其关联的最多10篇文章
  4. 输出嵌套的列表结构,方便你后续改成spoiler或accordion格式

完整代码实现

把下面的代码放到你的主题functions.php文件里,或者自定义插件中:

function custom_taxonomy_hierarchy_with_posts($taxonomy = 'your_custom_taxonomy', $parent_id = 0, $depth = 1) {
    // 获取当前父级下的所有子术语
    $terms = get_terms(array(
        'taxonomy' => $taxonomy,
        'parent' => $parent_id,
        'hide_empty' => false, // 如果要显示空术语,改成true则只显示有文章的
        'orderby' => 'name',
        'order' => 'ASC'
    ));

    if (!empty($terms)) {
        echo '<ul>';
        foreach ($terms as $term) {
            echo '<li>' . esc_html($term->name);

            // 判断是否是第三级(底层)术语
            if ($depth === 3) {
                // 查询该术语下最多10篇文章
                $posts = get_posts(array(
                    'post_type' => 'your_post_type', // 替换成你的自定义文章类型或'post'
                    'tax_query' => array(
                        array(
                            'taxonomy' => $taxonomy,
                            'field' => 'term_id',
                            'terms' => $term->term_id
                        )
                    ),
                    'posts_per_page' => 10,
                    'orderby' => 'date',
                    'order' => 'DESC'
                ));

                if (!empty($posts)) {
                    echo '<ul class="term-posts">';
                    foreach ($posts as $post) {
                        setup_postdata($post);
                        echo '<li><a href="' . get_permalink($post->ID) . '">' . get_the_title($post->ID) . '</a></li>';
                    }
                    wp_reset_postdata();
                    echo '</ul>';
                }
            } else {
                // 不是底层术语,继续递归遍历子术语,深度+1
                custom_taxonomy_hierarchy_with_posts($taxonomy, $term->term_id, $depth + 1);
            }

            echo '</li>';
        }
        echo '</ul>';
    }
}

使用方法

在你需要显示这个层级的模板文件(比如archive.php、page.php)里,调用这个函数,替换成你的自定义分类法和文章类型:

// 替换成你的自定义分类法名称,比如'product_category'
custom_taxonomy_hierarchy_with_posts('your_custom_taxonomy');

关键细节说明

  • 层级判断:通过$depth参数跟踪当前术语的层级,当$depth === 3时才显示文章,如果你需要调整层级(比如二级是底层),修改这个数值即可。
  • 文章查询:get_posts里的post_type要替换成你实际的文章类型,默认是'post'(普通文章)。
  • 样式调整:输出的列表带有term-posts类,你可以通过CSS自定义文章列表的样式,方便后续改成spoiler或accordion格式。
  • 空术语处理:hide_empty参数设为false会显示没有文章的术语,如果只想显示有文章的术语,改成true即可。

这样生成的嵌套列表结构,你可以很容易地用JavaScript或CSS把底层的文章列表改成spoiler(折叠面板)或者accordion格式啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:06:11