Woocommerce:仅为含特定属性的购物车商品设置购买倍数规则
WooCommerce:仅对特定属性商品设置购买数量倍数规则
需求说明
我正在搭建葡萄酒销售的WooCommerce站点,需实现以下规则:
- 商品按瓶售卖,自定义属性
pa_bottle包含三个术语:1liter(1升)、2liters(2升)、3liters(3升) - 仅购物车中所有属性为
1liter的商品总数量必须是3的倍数,其他属性商品无此限制
示例有效购物车:
- 1瓶普罗塞克(属性
1liter) - 2瓶普罗塞克(属性
3liters) - 2瓶香槟(属性
1liter)→ 1+2=3,符合3的倍数要求
问题场景
我原本使用了一个针对商品分类生效的脚本,尝试修改为针对1liter属性生效,但修改后规则错误地应用到所有商品,无法实现需求。
原分类脚本:
add_action( 'woocommerce_check_cart_items', 'woocommerce_check_cart_quantities' ); function woocommerce_check_cart_quantities() { $multiples = 3; $total_products = 0; $category_ids = array( 74 ); $found = false; foreach ( WC()->cart->get_cart() as $cart_item ) { if ( has_product_category( $cart_item['product_id'], $category_ids ) ) { $total_products += $cart_item['quantity']; $found = true; } } if ( ( $total_products % $multiples ) > 0 && $found ) wc_add_notice( sprintf( __('You need to buy in quantities of %s products', 'woocommerce'), $multiples ), 'error' ); }
无效的修改尝试:
将分类判断替换为属性判断:
if ( has_term( '1liter', 'pa_bottle', $cart_item['product_id'] ) ) {
解决方案
问题核心是可变产品的属性存储在变体(variation)上,而非父产品,原代码仅检查父产品ID会导致判断错误。以下是修正后的代码:
add_action( 'woocommerce_check_cart_items', 'wc_check_1liter_quantity_multiples' ); function wc_check_1liter_quantity_multiples() { $required_multiple = 3; $total_1liter = 0; // 遍历购物车所有商品项 foreach ( WC()->cart->get_cart() as $cart_item ) { // 处理可变产品的变体 if ( ! empty( $cart_item['variation_id'] ) ) { if ( has_term( '1liter', 'pa_bottle', $cart_item['variation_id'] ) ) { $total_1liter += $cart_item['quantity']; } } // 处理简单产品 else { if ( has_term( '1liter', 'pa_bottle', $cart_item['product_id'] ) ) { $total_1liter += $cart_item['quantity']; } } } // 当1升装商品总数量非0且不是3的倍数时,提示错误 if ( $total_1liter > 0 && ( $total_1liter % $required_multiple ) !== 0 ) { wc_add_notice( sprintf( __('所有1升装葡萄酒的总购买数量必须是%s的倍数', 'woocommerce'), $required_multiple ), 'error' ); } }
关键修改点
- 区分变体与简单产品:针对可变产品,使用
$cart_item['variation_id']检查变体属性;简单产品直接检查商品本身ID - 精准统计目标商品:仅累加
1liter属性商品的数量,其他商品不纳入统计范围 - 明确提示信息:错误提示直接指向1升装商品,避免用户混淆
内容的提问来源于stack exchange,提问作者steve
相关产品推荐
相关产品推荐

