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

WooCommerce:购物车含特定变体ID商品时添加50元附加费失败

问题分析与修复方案

原代码未生效的核心原因有两点:

  • 依赖WC()->cart全局对象而非钩子传入的$cart参数,在部分AJAX或异步场景下会出现上下文错误
  • 使用generate_cart_id + find_product_in_cart的匹配方式不够可靠,当商品存在额外属性(如自定义属性)时,生成的购物车ID会和实际存储的ID不匹配,导致无法检测到目标商品

另外代码里还有两处不符合需求的细节:

  • 附加费文本显示的是「数量折扣」,和需求的自定义提示不符
  • 变量$percentage命名错误,因为需求是固定50元附加费,并非百分比

修复后的代码

add_action( 'woocommerce_cart_calculate_fees', 'add_custom_product_surcharge', 30, 1 );
function add_custom_product_surcharge( $cart ) {
    // 后台非AJAX场景直接返回
    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    $target_product_id = 1761;
    $target_variation_id = 1853;
    $surcharge_amount = 50;
    $surcharge_label = '特定商品附加费'; // 自定义显示文本

    // 遍历购物车物品,检查是否存在目标商品
    foreach ( $cart->get_cart() as $cart_item ) {
        $product = $cart_item['data'];
        // 匹配主商品ID和变体ID
        if ( $product->get_id() === $target_product_id && $cart_item['variation_id'] === $target_variation_id ) {
            // 添加附加费,正数为额外收费
            $cart->add_fee( __($surcharge_label, 'woocommerce'), $surcharge_amount );
            break; // 找到目标商品后停止遍历
        }
    }
}

代码说明

  1. 使用钩子传入的$cart参数:避免全局对象调用的上下文问题,确保在所有购物车计算场景下都能正常工作
  2. 遍历购物车物品匹配:直接检查每个购物车项的主商品ID和变体ID,匹配逻辑更可靠,不受商品属性影响
  3. 自定义文本与固定金额:明确设置附加费的显示文本和金额,符合需求要求
  4. 提前终止遍历:找到目标商品后立即停止循环,提升性能

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 12:25:21