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

如何在WooCommerce含子分类的分类中显示产品总数?

解决WooCommerce包含子分类的分类产品总数显示问题

我来帮你搞定这个问题!你当前的代码之所以只在无子分类的分类页生效,是因为$term->count只会统计直接归属该分类的产品数量,不会包含它下属子分类里的产品。要实现包含子分类的总产品数统计,我们需要修改代码来获取当前分类及其所有子分类的ID,再统一统计这些分类下的产品总数。

修改后的代码

add_action( 'woocommerce_before_shop_loop', 'add_product_count_view', 10);
function add_product_count_view() {
    // 仅在产品分类页面执行逻辑
    if ( is_product_category() ) {
        global $wp_query;
        $current_category = $wp_query->get_queried_object();
        
        // 获取当前分类的所有子分类ID
        $child_category_ids = get_term_children( $current_category->term_id, 'product_cat' );
        // 合并当前分类ID和子分类ID,得到完整的分类ID数组
        $all_category_ids = array_merge( array( $current_category->term_id ), $child_category_ids );
        
        // 使用WooCommerce官方函数查询所有目标分类下的已发布产品
        $products = wc_get_products( array(
            'category' => $all_category_ids,
            'status' => 'publish',
            'return' => 'ids', // 仅返回产品ID数组,提升查询效率
            'limit' => -1 // 不限制数量,确保获取所有产品
        ) );
        
        // 输出分类名称和包含子分类的总产品数,用esc_html转义确保安全
        echo esc_html( $current_category->name . '(' . count( $products ) . ')' );
    }
}

代码关键说明

  1. 页面判断:增加is_product_category()检查,确保代码只在产品分类页面运行,避免在其他页面(比如首页、产品详情页)出现错误。
  2. 子分类ID获取:用get_term_children()获取当前分类的所有子分类ID,再和当前分类ID合并,这样统计范围就覆盖了当前分类+所有子分类。
  3. 准确统计产品数:使用WooCommerce官方的wc_get_products()函数查询产品,相比直接操作数据库,它会自动处理WooCommerce的产品状态、库存等规则,统计结果更准确。
  4. 安全输出:用esc_html()转义输出内容,避免潜在的XSS安全风险,这是WordPress开发的最佳实践。

替换你原来的代码后,就能在包含子分类的产品分类页正确显示所有下属产品的总数啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 19:57:52