WooCommerce:应用优惠券后商品价格为0,如何设置最低商品价格?
WooCommerce固定金额优惠券避免商品价格为0的解决方案
可以通过自定义代码实现需求,核心是调整优惠券折扣的分摊逻辑,同时满足三个限制条件:商品最低保留0.5元、购物车总额不低于300元、折扣不超总额50%。
实现步骤
直接将以下代码添加到你的主题functions.php文件,或者自定义插件中:
// 定义配置参数 define('MIN_PRODUCT_PRICE', 0.5); // 商品最低保留价格 define('MIN_CART_TOTAL', 300); // 购物车最低金额要求 define('MAX_DISCOUNT_RATIO', 0.5); // 折扣最高占总额比例 add_filter('woocommerce_coupon_get_discount_amount', 'adjust_coupon_discount_to_avoid_zero_price', 10, 5); function adjust_coupon_discount_to_avoid_zero_price($discount_amount, $discounting_amount, $cart_item, $single, $coupon) { // 仅处理固定金额优惠券 if ($coupon->get_discount_type() !== 'fixed_cart') { return $discount_amount; } // 检查购物车总额是否满足最低要求 $cart_total = WC()->cart->subtotal; if ($cart_total < MIN_CART_TOTAL) { return 0; // 不满足最低金额,不应用折扣 } // 计算折扣上限:不超过购物车总额的50% $max_allowed_discount = $cart_total * MAX_DISCOUNT_RATIO; if ($coupon->get_amount() > $max_allowed_discount) { $coupon->set_amount($max_allowed_discount); } // 计算当前商品可承受的最大折扣(确保折扣后价格不低于最低值) $product_price = $cart_item['data']->get_price(); $max_item_discount = $product_price - MIN_PRODUCT_PRICE; // 如果原计算的折扣超过商品可承受的最大值,调整为最大值 if ($discount_amount > $max_item_discount) { $discount_amount = $max_item_discount; } return $discount_amount; }
代码说明
- 配置参数:开头的三个常量可以根据需求直接修改数值,不用动核心逻辑
- 优惠券类型校验:只针对固定金额优惠券生效,不影响其他类型优惠券
- 购物车最低金额检查:如果购物车总额低于300,直接取消折扣
- 折扣上限限制:自动将优惠券折扣金额限制在购物车总额的50%以内
- 商品最低价格保障:每个商品分摊的折扣不会让其价格低于0.5元,超出的折扣会自动调整到其他商品上(WooCommerce会自动重新分配剩余折扣)
测试时建议添加不同价格的商品到购物车,应用固定金额优惠券,确认每个商品价格都不低于0.5元,同时折扣符合限制条件。
内容的提问来源于stack exchange,提问作者Reda EL FILLALI
相关产品推荐
相关产品推荐

