Woocommerce实现购物车同时含Drinks和Bundles分类时添加折扣费用
问题原因
你现有代码的逻辑是只要购物车中出现Drinks或Bundles任意一个分类的商品,就直接把折扣金额赋值为-1,没有验证两个分类是否同时存在,所以和需求不符。
修改思路
新增两个布尔标识,分别记录两个分类是否都在购物车中存在,遍历完全部商品后,只有两个标识同时为真时才触发折扣。
修改后完整代码
add_action( 'woocommerce_cart_calculate_fees','custom_pcat_fee', 20, 1 ); function custom_pcat_fee( $cart ) { if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return; $has_drinks = false; $has_bundles = false; $fee_amount = -1; // 遍历购物车商品,分别标记两个分类是否存在 foreach( $cart->get_cart() as $cart_item ){ if( has_term( 'drinks', 'product_cat', $cart_item['product_id']) ){ $has_drinks = true; } if( has_term( 'bundles', 'product_cat', $cart_item['product_id']) ){ $has_bundles = true; } } // 只有两个分类同时存在时才添加折扣 if ( $has_drinks && $has_bundles ){ WC()->cart->add_fee( __( "Kombucha Bundle Discount", "woocommerce" ), $fee_amount, false ); } }
核心调整点
- 移除了原来单次匹配到任意分类就赋值折扣的逻辑,改为分别统计两个分类的存在状态
- 遍历结束后新增了两个分类同时存在的判断,只有满足条件才触发折扣添加
内容的提问来源于stack exchange,提问作者Giuls
相关产品推荐
相关产品推荐

