如何在WooCommerce中按购物车总额切换百分比/固定金额优惠券折扣?
嘿,这个需求其实用WooCommerce自带的功能或者几行代码就能轻松搞定,我给你两种实用方案,你可以根据自己的技术偏好来选:
方案一:使用WooCommerce内置优惠券功能(无需代码)
这种方法适合不太懂代码的用户,通过创建两个优惠券并设置金额限制来实现:
- 第一步:创建第一个优惠券(针对购物车总额<200的10%折扣)
- 进入WooCommerce后台 → 营销 → 优惠券 → 点击「添加优惠券」
- 设置优惠券代码(比如
UNDER200,方便识别) - 折扣类型选择「百分比折扣」,折扣值填
10 - 滚动到「使用限制」板块:
- 「最低消费」设为
0(或者留空,确保所有低于200的订单都能触发) - 「最高消费」设为
199.99(这样刚好排除总额等于200的情况)
- 「最低消费」设为
- 保存这个优惠券
- 第二步:创建第二个优惠券(针对购物车总额≥200的固定20元折扣)
- 同样点击「添加优惠券」,设置代码比如
OVER200 - 折扣类型选择「固定购物车折扣」,折扣值填
20 - 滚动到「使用限制」板块:
- 「最低消费」设为
200(确保只有总额达标才能使用) - 「最高消费」留空(或者设一个极大值,比如
999999,不限制上限)
- 「最低消费」设为
- 保存优惠券
- 同样点击「添加优惠券」,设置代码比如
- 第三步:可选设置自动应用
如果不想让用户手动输入优惠券代码,可以用免费插件(比如Auto Apply Coupons)或者官方的WooCommerce Coupons扩展,设置两个优惠券的自动触发条件,让系统根据购物车金额自动匹配对应的折扣。
方案二:使用自定义代码实现(更灵活,单优惠券搞定)
如果你觉得创建两个优惠券太繁琐,用几行代码就能实现一个智能优惠券,自动根据购物车金额调整折扣:
- 先创建一个基础优惠券:
- 后台添加新优惠券,代码设为
SMARTDISCOUNT(你可以改成自己喜欢的) - 折扣类型随便选一个(比如百分比折扣,值填
10就行,后面代码会覆盖这个设置) - 不需要设置任何使用限制,代码会处理金额判断
- 后台添加新优惠券,代码设为
- 添加自定义代码:
你可以把这段代码添加到主题的functions.php文件里,或者用专门的代码管理插件(比如Code Snippets,更安全,避免主题更新丢失代码):
注意:你可以根据需求修改代码里的add_filter( 'woocommerce_coupon_get_discount_amount', 'dynamic_coupon_discount_based_on_cart_total', 10, 5 ); function dynamic_coupon_discount_based_on_cart_total( $discount, $discounting_amount, $cart_item, $single, $coupon ) { // 替换成你刚才创建的优惠券代码 $target_coupon_code = 'SMARTDISCOUNT'; if ( $coupon->get_code() !== $target_coupon_code ) { return $discount; } // 获取购物车商品总额(不含运费和税费;如果要包含的话,改成 WC()->cart->get_total()) $cart_total = WC()->cart->get_subtotal(); $threshold = 200; // 设定的限额 $fixed_discount = 20; // 限额以上的固定折扣 $percent_discount = 0.1; // 限额以下的百分比折扣(10%) if ( $cart_total >= $threshold ) { // 总额达标,返回固定折扣金额 return $fixed_discount; } else { // 总额未达标,返回百分比折扣金额 return $cart_total * $percent_discount; } }$threshold、$fixed_discount和$percent_discount参数,比如把限额改成300,固定折扣改成30之类的。 - 测试验证:
添加不同金额的商品到购物车,输入优惠券代码,看看总额190时是不是折扣19,总额210时是不是折扣20,确保逻辑正确。
小提醒
- 方案一操作简单,管理直观,适合新手;方案二更灵活,后期调整规则只需要改代码参数就行。
- 如果用代码方案,记得备份好文件,或者用代码插件来管理,避免主题更新导致代码丢失。
内容的提问来源于stack exchange,提问作者Jun Dolor
相关产品推荐
相关产品推荐

