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

Woocommerce按条件为购物车符合规则商品设置10%折扣实现问题

Woocommerce指定组合商品折扣实现方案

原有代码核心逻辑缺陷如下:

  • 未指定另外两个可参与折扣的商品ID,无法区分无关商品
  • 没有统计必填商品、可折扣商品的数量,无法实现多套套餐的匹配逻辑
  • 没有按规则优先对低价可折扣商品应用优惠
  • 调用add_fee时传递正数会增加用户应付金额,折扣需要传递负值

以下是完整可运行的修正代码:

function apply_discount_ten( $cart ) {
    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    // 请替换为你实际的商品ID:必填商品ID,可折扣商品1、2的ID
    $required_product_id = 2530;
    $eligible_discount_product_ids = [123, 456]; // 对应售价15欧、12欧的两个商品ID

    $required_count = 0; // 必填商品总数量
    $eligible_products = []; // 符合条件的可折扣商品列表
    $required_product_price = 0;

    // 遍历购物车筛选指定商品
    foreach ( $cart->get_cart() as $cart_item ) {
        $product = $cart_item['data'];
        $product_id = $product->get_id();
        $qty = $cart_item['quantity'];
        $price = $product->get_price();

        // 统计必填商品
        if ($product_id == $required_product_id) {
            $required_count += $qty;
            $required_product_price = $price;
            continue;
        }

        // 收集可折扣商品
        if (in_array($product_id, $eligible_discount_product_ids)) {
            for ($i=0; $i<$qty; $i++) {
                $eligible_products[] = $price;
            }
        }
    }

    // 计算可享受的套餐数量:取必填商品数和可折扣商品数的最小值
    $package_count = min($required_count, count($eligible_products));
    if ($package_count <= 0) {
        return;
    }

    // 可折扣商品按价格从低到高排序,优先给低价商品打折
    asort($eligible_products);
    // 取对应套餐数量的低价商品
    $discounted_eligible = array_slice($eligible_products, 0, $package_count);

    // 计算总折扣:每个套餐包含1个必填商品10%折扣 + 1个可折扣商品10%折扣
    $total_discount = 0;
    $total_discount += $required_product_price * 0.1 * $package_count;
    foreach ($discounted_eligible as $price) {
        $total_discount += $price * 0.1;
    }

    // 添加折扣(负值代表扣减金额)
    if ($total_discount > 0) {
        $cart->add_fee( '10%套餐折扣', -$total_discount, true );
    }
}
add_action( 'woocommerce_cart_calculate_fees', 'apply_discount_ten', 10, 1 );

注意事项

  • 使用前请将$eligible_discount_product_ids数组内的ID替换为你店铺内对应两个可参与折扣商品的实际ID
  • 代码已适配所有需求场景:自动排除无关商品、优先给低价可折扣商品打折、按商品数量匹配可享受的套餐套数
  • 折扣会自动显示在购物车和结算页的费用明细中,符合Woocommerce原生交互逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 08:36:04