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

如何获取WooCommerce三级以内的商品分类及子分类?

解决WooCommerce商品分类仅展示三级层级的问题

我清楚你想要实现的是只保留主分类→一级子分类→二级子分类这三级结构,四级及更深层级的分类需要完全隐藏。咱们先拆解下现有代码的问题:它在遍历二级子分类后没有停止,还会继续尝试获取更深的层级,而且HTML标签的嵌套逻辑也有小问题,容易导致页面结构混乱。

下面是调整后的代码,我针对性做了这些优化:

  1. 严格控制遍历层级:只处理主分类(层级0)、一级子分类(层级1)、二级子分类(层级2),彻底跳过四级及以下分类
  2. 修复HTML标签嵌套错误,确保<ul>和<li>正确闭合
  3. 加入安全转义函数,符合WordPress的开发规范
  4. 增加非空和错误判断,避免出现PHP警告
<?php
// 获取所有主分类(层级0)
$args = array(
    'taxonomy' => 'product_cat',
    'hide_empty' => false,
    'parent' => 0
);
$product_cats = get_terms($args);

if (!empty($product_cats) && !is_wp_error($product_cats)) {
    echo '<ul class="nav-menu__cats">';
    foreach ($product_cats as $parent_cat) {
        echo '<li><a href="' . esc_url(get_term_link($parent_cat->term_id)) . '">' . esc_html($parent_cat->name) . '</a>';
        
        // 获取一级子分类(层级1,父级为主分类)
        $child_args = array(
            'taxonomy' => 'product_cat',
            'hide_empty' => false,
            'parent' => $parent_cat->term_id
        );
        $child_cats = get_terms($child_args);
        
        if (!empty($child_cats) && !is_wp_error($child_cats)) {
            echo '<ul>';
            foreach ($child_cats as $child_cat) {
                echo '<li><a href="' . esc_url(get_term_link($child_cat->term_id)) . '">' . esc_html($child_cat->name) . '</a>';
                
                // 获取二级子分类(层级2,父级为一级子分类)
                $grandchild_args = array(
                    'taxonomy' => 'product_cat',
                    'hide_empty' => false,
                    'parent' => $child_cat->term_id
                );
                $grandchild_cats = get_terms($grandchild_args);
                
                if (!empty($grandchild_cats) && !is_wp_error($grandchild_cats)) {
                    echo '<ul>';
                    foreach ($grandchild_cats as $grandchild_cat) {
                        // 仅输出二级子分类,不再向下获取更深层级
                        echo '<li><a href="' . esc_url(get_term_link($grandchild_cat->term_id)) . '">' . esc_html($grandchild_cat->name) . '</a></li>';
                    }
                    echo '</ul>';
                }
                
                echo '</li>';
            }
            echo '</ul>';
        }
        
        echo '</li>';
    }
    echo '</ul>';
}
?>

关键说明:

  • 每一层级都做了!empty()和!is_wp_error()判断,避免因分类为空或获取失败导致的页面报错
  • 使用esc_url()和esc_html()对链接和分类名称做转义处理,防止XSS攻击,符合WordPress安全标准
  • 明确在二级子分类层级停止遍历,不会触发四级分类的获取逻辑,完全符合你要的三级结构要求

这样修改后,你的商品分类导航就会严格按照三级层级展示,四级及以下的分类不会再出现在页面中了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 18:42:35