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

WooCommerce购物车阶梯折扣:指定商品+优惠券触发实现问询

嘿,我来帮你搞定这两个需求!首先得修正你原代码里的一个小逻辑问题——折扣档位的判断顺序反了,会导致高额度的折扣无法生效,然后咱们再一步步加上指定商品和手动触发的功能:

问题1:仅将折扣应用于指定商品

要实现只给特定商品计算折扣,我们需要先定义目标商品ID数组,然后遍历购物车,累加这些商品的总金额,用这个金额来计算折扣,而不是整个购物车的总额。

问题2:设置手动触发(输入优惠券码才生效)

我们可以指定一个专属优惠券码,只有当用户在购物车中应用了这个优惠券时,折扣才会触发。需要检查购物车中已应用的优惠券是否包含我们指定的码。


完整修改后的代码

add_action( 'woocommerce_cart_calculate_fees', 'discount_based_on_target_products_with_coupon', 25, 1 );
function discount_based_on_target_products_with_coupon( $cart ) {
    // 后台且非AJAX请求时不执行
    if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return;

    // --- 可自定义配置区 ---
    $target_product_ids = array(123, 456); // 替换成你的指定商品ID
    $required_coupon_code = 'VIP_STEP_DISCOUNT'; // 替换成你要使用的专属优惠券码
    $discount_tiers = array(
        array('min_amount' => 500000, 'percent' => 0.20),
        array('min_amount' => 350000, 'percent' => 0.15),
        array('min_amount' => 200000, 'percent' => 0.10),
    );
    // --- 配置结束 ---

    // 检查是否应用了指定优惠券,没应用直接退出
    $applied_coupons = $cart->get_applied_coupons();
    if ( ! in_array( $required_coupon_code, $applied_coupons ) ) {
        return;
    }

    // 计算指定商品的总金额(不含税,如需含税可替换为line_subtotal + line_subtotal_tax)
    $target_total = 0;
    foreach ( $cart->get_cart() as $cart_item ) {
        $product_id = $cart_item['product_id'];
        if ( in_array( $product_id, $target_product_ids ) ) {
            $target_total += $cart_item['line_subtotal'];
        }
    }

    // 从高到低匹配折扣档位,确保最高优先级的折扣生效
    $discount = 0;
    foreach ( $discount_tiers as $tier ) {
        if ( $target_total >= $tier['min_amount'] ) {
            $discount = $target_total * $tier['percent'];
            break;
        }
    }

    // 添加折扣(负数表示优惠)
    if ( $discount > 0 ) {
        $cart->add_fee( __('阶梯折扣', 'woocommerce'), -$discount );
    }
}

关键逻辑说明

  • 指定商品控制:通过$target_product_ids数组定义需要享受折扣的商品,遍历购物车时只累加这些商品的金额,确保折扣仅作用于目标商品。
  • 手动触发控制:只有当用户在购物车中应用了$required_coupon_code指定的优惠券时,折扣逻辑才会执行,实现手动触发效果。
  • 修复原代码逻辑:将折扣档位从高到低排序并通过循环判断,避免了原代码中低档位覆盖高档位的错误,确保高金额能匹配到最高折扣。
  • 灵活配置:所有需要自定义的参数都放在配置区,你可以轻松修改商品ID、优惠券码和折扣档位规则。

内容的提问来源于stack exchange,提问作者angga

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:08:14