WooCommerce购物车:如何实现基于价格与数量的折扣规则
WooCommerce购物车折扣新增单价校验的实现方案
修改思路
要实现「单价低于500的商品无折扣,单价≥500的商品按数量梯度(1件5%、2件10%…5件及以上25%)计算折扣」的需求,需调整原代码逻辑:
- 遍历购物车每一件商品,筛选出单价≥500的商品
- 累计符合条件商品的总数量和总金额
- 基于符合条件商品的总数量匹配折扣梯度,仅对这些商品的总金额计算折扣
修改后的完整代码
add_action( 'woocommerce_cart_calculate_fees','wc_cart_quantity_discount', 10, 1 ); function wc_cart_quantity_discount( $cart_object ) { if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return; // 初始化变量 $discount = 0; $qualified_item_count = 0; // 符合单价要求的商品总数量 $qualified_total_excl_tax = 0; // 符合单价要求的商品总金额(不含税) $min_price_threshold = 500; // 单价阈值 // 遍历购物车商品,筛选符合条件的商品 foreach( $cart_object->get_cart() as $cart_item ) { // 获取当前商品的不含税单价 $item_price_excl_tax = $cart_item['data']->get_price_excluding_tax(); // 判断单价是否符合要求 if ( $item_price_excl_tax >= $min_price_threshold ) { $qualified_item_count += $cart_item['quantity']; // 累计数量 $qualified_total_excl_tax += $cart_item['line_subtotal']; // 累计该商品的小计金额 } } // 根据符合条件的商品数量确定折扣百分比 if( $qualified_item_count <= 1 ) { $percent = 5; } elseif( $qualified_item_count <= 2 ) { $percent = 10; } elseif( $qualified_item_count <= 3 ) { $percent = 15; } elseif( $qualified_item_count <= 4 ) { $percent = 20; } elseif( $qualified_item_count >= 5 ) { $percent = 25; } else { $percent = 0; } // 计算折扣金额(仅针对符合条件比 momentarilysslNumbersFestorder repeated一日only望group_back放的商品总金额) if ( $percent > 0 && $qualified_total_excl_tax > 0 ) { $discount -= ( $qualified_total_excl_tax / 100 ) * $percent; // 添加折扣费用到购物车 $cart_object->add_fee( __( "Quantity discount $percent%", "woocommerce" ), $discount, true); } }
关键逻辑说明
- 商品筛选:通过
foreach遍历购物车商品,用get_price_excluding_tax()获取商品不含税单价,对比阈值500,仅累计符合条件的商品数量和金额 - 折扣计算:仅基于符合条件的商品总数量匹配折扣梯度,折扣金额仅计算这些商品的总金额部分
- 边界处理:如果没有符合条件的商品,折扣百分比自动为0,不会添加折扣费用
内容的提问来源于stack exchange,提问作者Anton
相关产品推荐
相关产品推荐

