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

如何输出WordPress中所有分类及其多层子分类的层级结构(含各层级分类下的文章标题)

如何输出WordPress中所有分类及其多层子分类的层级结构(含各层级分类下的文章标题)

嘿,我明白你的需求了——不仅要输出顶级分类下的文章,还要把所有嵌套的子分类、孙分类都按层级展示,每个分类下面还要列出对应的文章标题对吧?这时候用递归函数处理是最省心的,因为分类的层级可能不确定,递归能自动遍历所有嵌套层级。

直接上可复用的代码,你可以把这段代码放到主题的模板文件(比如category.php、page.php,或者自定义的短代码里):

<?php
// 定义递归函数,处理分类及其子分类、关联文章
function display_category_hierarchy_with_posts( $category_id = 0 ) {
    // 配置分类查询参数:按名称升序排列,可根据需求调整
    $category_args = array(
        'parent' => $category_id,
        'orderby' => 'name',
        'order' => 'ASC',
        'hide_empty' => false, // 设为true则只显示包含文章的分类,false显示所有分类
    );
    $categories = get_categories( $category_args );

    foreach ( $categories as $category ) {
        // 计算当前分类的层级,生成缩进(用&emsp;实现,也可以用CSS样式替代)
        $level = substr_count( get_category_parents( $category->term_id, false, ',' ), ',' ) - 1;
        $indent = str_repeat( '&emsp;', $level );
        
        // 输出当前分类名称
        echo $indent . '- ' . esc_html( $category->name ) . '<br>';

        // 查询当前分类下的所有已发布文章,按标题升序排列
        $post_args = array(
            'cat' => $category->term_id,
            'orderby' => 'title',
            'order' => 'ASC',
            'posts_per_page' => -1, // 显示该分类下全部文章
            'post_status' => 'publish',
        );
        $posts = get_posts( $post_args );

        if ( ! empty( $posts ) ) {
            // 输出文章标题,层级比分类深一级
            $post_indent = str_repeat( '&emsp;', $level + 1 );
            foreach ( $posts as $post ) {
                setup_postdata( $post );
                echo $post_indent . '  - ' . esc_html( get_the_title() ) . '<br>';
            }
            wp_reset_postdata(); // 重置文章数据,避免干扰后续查询
        }

        // 递归调用,处理当前分类的子分类
        display_category_hierarchy_with_posts( $category->term_id );
    }
}

// 启动层级遍历,从顶级分类(parent=0)开始
display_category_hierarchy_with_posts();
?>

关键细节说明:

  • 层级缩进:用get_category_parents计算分类的嵌套深度,配合str_repeat生成缩进,你也可以把&emsp;换成CSS类,通过padding-left来控制样式,这样更灵活;
  • 空分类控制:hide_empty参数如果设为true,会自动过滤掉没有文章的分类;
  • 自定义分类法适配:如果要处理自定义分类法,只需在$category_args里加上'taxonomy' => '你的自定义分类法Slug'即可;
  • 数据安全:用esc_html转义输出内容,避免XSS风险,这是WordPress开发的好习惯哦。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 12:58:04