WooCommerce限制购物车仅添加同一分类商品的代码报错问题咨询
WooCommerce购物车仅允许添加同一分类商品的修复方案
现有代码错误原因
你当前的代码逻辑存在倒置问题:只要检测到购物车内存在courses分类的商品,就会直接拦截所有加购请求并返回错误,自然无法添加同一分类下的其他商品。
修复后完整代码
add_filter( 'woocommerce_add_to_cart_validation', 'restrict_same_category_cart', 10, 3 ); function restrict_same_category_cart( $passed, $product_id, $quantity ) { // 定义目标商品分类,支持填写分类ID、别名、名称 $target_category = 'courses'; // 购物车为空时直接放行 if( WC()->cart->is_empty() ) { return $passed; } // 校验当前要添加的商品是否属于目标分类 $current_is_target = has_term( $target_category, 'product_cat', $product_id ); // 遍历购物车已有商品,校验分类匹配情况 foreach ( WC()->cart->get_cart() as $cart_item ) { $cart_is_target = has_term( $target_category, 'product_cat', $cart_item['product_id'] ); // 新商品和已有商品分类不一致时触发拦截 if( $current_is_target !== $cart_is_target ) { wc_add_notice( __('不允许同时添加课程类和其他类型的商品到购物车', 'woocommerce' ), 'error' ); return false; } } return $passed; }
逻辑说明
- 购物车为空时,第一个加购的商品无论属于哪个分类都直接放行
- 后续加购时,会同时校验新商品和购物车内已有商品的分类归属
- 只有当新商品和已有商品分类不统一时才会触发报错拦截,同一分类下的多个商品可以正常加购
内容的提问来源于stack exchange,提问作者Rick-ton
相关产品推荐
相关产品推荐

