如何在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 ) . ')' ); } }
代码关键说明
- 页面判断:增加
is_product_category()检查,确保代码只在产品分类页面运行,避免在其他页面(比如首页、产品详情页)出现错误。 - 子分类ID获取:用
get_term_children()获取当前分类的所有子分类ID,再和当前分类ID合并,这样统计范围就覆盖了当前分类+所有子分类。 - 准确统计产品数:使用WooCommerce官方的
wc_get_products()函数查询产品,相比直接操作数据库,它会自动处理WooCommerce的产品状态、库存等规则,统计结果更准确。 - 安全输出:用
esc_html()转义输出内容,避免潜在的XSS安全风险,这是WordPress开发的最佳实践。
替换你原来的代码后,就能在包含子分类的产品分类页正确显示所有下属产品的总数啦!
内容的提问来源于stack exchange,提问作者Aleksandr Parshkov
相关产品推荐
相关产品推荐

