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

基于指定产品ID数量调整WooCommerce购物车特定商品价格的问题

解决WooCommerce多份商品优惠不生效问题

原代码的核心问题在于两点:

  • 使用了break语句,修改第一个符合条件的商品后就终止循环,导致后续的1561商品(若为多个购物车条目)无法享受优惠
  • 仅当累计指定商品数量≥2时才触发价格修改,逻辑不符合你“所有1561商品均按10NIS计价”的需求

下面是修改后的代码,实现只要购物车中包含指定组内的任意商品,所有ID为1561的商品都按10NIS计价:

add_action('woocommerce_before_calculate_totals', 'apply_universal_discount_to_target_product', 10, 1);

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

    // 配置参数
    $discounted_product_id = 1561;
    $new_price = 10; // NIS 10
    $trigger_product_ids = array(1561, 1919, 1568, 1562, 1563, 1564, 1565, 1566, 1567);

    // 检查是否满足优惠触发条件
    $discount_triggered = false;
    foreach ($cart->get_cart() as $cart_item) {
        if (in_array($cart_item['product_id'], $trigger_product_ids)) {
            $discount_triggered = true;
            break;
        }
    }

    // 给所有目标商品设置优惠价
    if ($discount_triggered) {
        foreach ($cart->get_cart() as $cart_item_key => $cart_item) {
            if ($cart_item['product_id'] == $discounted_product_id) {
                $cart_item['data']->set_regular_price($new_price);
                $cart_item['data']->set_price($new_price);
                $cart_item['data']->set_sale_price($new_price); // 确保价格显示一致
            }
        }
    }
}

代码说明:

  1. 触发条件检查:先遍历购物车确认是否存在指定组内的商品,只要有一个就激活优惠
  2. 批量修改价格:激活优惠后,遍历所有购物车条目,将所有1561商品的单价统一设置为10NIS
  3. 兼容性处理:同时设置regular_price、price和sale_price,避免不同场景下价格显示异常
  4. 取消终止循环:移除原代码的break,确保所有符合条件的商品都能被处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 08:00:33