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

Woocommerce购物车费用问题:如何向现有费用追加自定义附加费

解决WooCommerce追加自定义附加费的问题

我来帮你搞定这个问题,你的代码里有几个关键问题导致无法正常工作,我一步步给你捋清楚并修正:

原代码的核心问题

  1. 代码未完成:add_fee() 调用没有写完,缺少必要参数和语法闭合
  2. 错误处理现有费用:get_fees() 返回的是费用对象数组,不能直接和数值相加,需要遍历计算现有费用的总金额
  3. 全局变量使用过时:现在 WooCommerce 更推荐用 WC()->cart 替代 global $woocommerce,兼容性和可靠性更好
  4. 缺少安全判断:未检查购物车是否存在,可能在非购物车页面触发报错

修正后的完整方案

根据你“向现有购物车费用中追加自定义附加费”的需求,我提供两种常用方案:

方案1:新增独立的附加费项(推荐)

如果只是想在现有费用之外,单独添加一个基于Stripe费率的预订手续费,用这个方案:

add_action( 'woocommerce_cart_calculate_fees', 'woocommerce_custom_surcharge' );
function woocommerce_custom_surcharge() {
    // 先确保购物车存在且非空,避免报错
    if ( ! WC()->cart || WC()->cart->is_empty() ) {
        return;
    }

    // 手续费参数可按需调整
    $stripe_percent = 0.015;  // 1.5% 的百分比手续费
    $stripe_fixed = 0.20;     // 每笔订单的固定手续费

    // 计算手续费基数:商品总价 + 运费
    $fee_base = WC()->cart->cart_contents_total + WC()->cart->shipping_total;
    // 计算最终手续费金额
    $surcharge = ( $fee_base * $stripe_percent ) + $stripe_fixed;

    // 只有手续费大于0时才添加,避免显示无意义的0费用
    if ( $surcharge > 0 ) {
        // 添加附加费:参数依次是费用名称、金额、是否含税、税类(可选)
        WC()->cart->add_fee( '预订手续费(Stripe)', $surcharge, false );
    }
}

方案2:合并现有费用与新附加费

如果你想把购物车里已有的所有费用,和新计算的Stripe手续费合并成一个统一的费用项,用这个方案:

add_action( 'woocommerce_cart_calculate_fees', 'woocommerce_custom_surcharge' );
function woocommerce_custom_surcharge() {
    if ( ! WC()->cart || WC()->cart->is_empty() ) {
        return;
    }

    $stripe_percent = 0.015;
    $stripe_fixed = 0.20;

    // 先计算现有所有费用的总金额
    $existing_fees_total = 0;
    foreach ( WC()->cart->get_fees() as $fee ) {
        $existing_fees_total += $fee->amount;
    }

    // 计算新的Stripe手续费
    $fee_base = WC()->cart->cart_contents_total + WC()->cart->shipping_total;
    $new_surcharge = ( $fee_base * $stripe_percent ) + $stripe_fixed;

    // 合并后的总费用
    $total_booking_fee = $existing_fees_total + $new_surcharge;

    // 移除原有所有费用,再添加合并后的费用
    WC()->cart->remove_all_fees();
    if ( $total_booking_fee > 0 ) {
        WC()->cart->add_fee( '总预订手续费', $total_booking_fee, false );
    }
}

关键细节说明

  • add_fee() 的第三个参数$taxable:设置为true时,该费用会被征税;false则不征税,可根据你的税费规则调整
  • 加入了$surcharge > 0的判断:避免订单金额为0时,显示无意义的0费用项
  • 使用WC()->cart替代全局变量:符合WooCommerce最新开发规范,减少不同版本间的兼容性问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:33:26