如何修改WooCommerce的get_cart_contents_count()排除指定商品分类计数
WooCommerce购物车计数排除指定商品分类的修复方案
原代码失效原因
has_term()函数未传入商品ID参数时,默认读取当前页面全局文章的分类属性,无法判断购物车商品的分类,条件判断不生效。WC()->cart->get_cart_contents_count()会返回购物车所有商品的总数量,不会自动过滤指定分类的商品,外层加条件无法修改该方法的统计逻辑。
正确实现代码
if ( WC()->cart ) { $exclude_cats = array('set'); // 填写要排除的商品分类别名,可添加多个 $items_count = 0; $min_count = 6; // 遍历购物车商品逐个判断分类 foreach ( WC()->cart->get_cart() as $cart_item ) { $product_id = $cart_item['product_id']; // 仅统计不属于排除分类的商品 if ( ! has_term( $exclude_cats, 'product_cat', $product_id ) ) { // 按购买数量累加,若要统计商品种类数改为 $items_count += 1 即可 $items_count += $cart_item['quantity']; } } // 此处保留你原有的后续判断逻辑即可 }
可选调整说明
- 若需要统计商品种类数(同一款商品买多件仅算1次),将累加逻辑替换为
$items_count += 1即可。 - 若你给商品变式单独设置了分类,需要判断变式的分类属性,将
$product_id = $cart_item['product_id'];替换为$product_id = $cart_item['data']->get_id();即可。
内容的提问来源于stack exchange,提问作者Uxell
相关产品推荐
相关产品推荐

