You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 12:15:39