WooCommerce购物车分类组合验证:自定义分类互斥规则开发需求
自定义WooCommerce购物车分类验证规则实现方案
根据你的需求,我调整了原代码的逻辑,精准实现你指定的分类组合限制规则。下面是修改后的完整代码,直接替换你原来的代码即可:
add_filter( 'woocommerce_add_to_cart_validation', 'custom_add_to_cart_category_validation', 10, 3 ); function custom_add_to_cart_category_validation( $passed, $product_id, $quantity ) { // 定义分类slug,方便后续修改维护 $toys_slug = 'toys'; $allowed_combo_slugs = array('home', 'garden', 'outfit'); // 获取当前添加商品的分类slug集合 $current_product_terms = wp_get_post_terms( $product_id, 'product_cat', array('fields' => 'slugs') ); // 购物车为空时直接通过验证,无需检查 if( WC()->cart->is_empty() ) { return $passed; } // 判断当前商品所属的分类组 $is_toys_product = !empty(array_intersect($current_product_terms, array($toys_slug))); $is_allowed_combo_product = !empty(array_intersect($current_product_terms, $allowed_combo_slugs)); // 遍历购物车现有商品,检查分类冲突 foreach (WC()->cart->get_cart() as $cart_item ){ $cart_product_terms = wp_get_post_terms( $cart_item['product_id'], 'product_cat', array('fields' => 'slugs') ); // 场景1:当前添加Toys商品,购物车已有其他三类商品 if( $is_toys_product && !empty(array_intersect($cart_product_terms, $allowed_combo_slugs)) ) { wc_add_notice( __( '无法添加该商品,购物车中已有非Toys类商品', 'woocommerce' ), 'error' ); $passed = false; break; } // 场景2:当前添加允许组合的三类商品,购物车已有Toys商品 if( $is_allowed_combo_product && !empty(array_intersect($cart_product_terms, array($toys_slug))) ) { wc_add_notice( __( '无法添加该商品,购物车中已有Toys类商品', 'woocommerce' ), 'error' ); $passed = false; break; } } return $passed; }
代码逻辑说明:
- 我把分类slug单独定义成变量,后续你要修改分类名称时,直接改这里的slug就行,不用在代码里反复查找修改
- 先判断当前要添加的商品属于「Toys组」还是「允许组合的Home/Garden/Outfit组」
- 遍历购物车现有商品时,只检查两种核心冲突场景,既保证规则准确,又避免多余的逻辑判断
- 错误提示文字你可以根据自己的需求任意修改,换成英文或者更贴合你店铺风格的表述都可以
内容的提问来源于stack exchange,提问作者Liekeee
相关产品推荐
相关产品推荐

