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

如何在结账页(checkout page)及下单环节保存自定义费用(custom fee)并同步订单总价

WooCommerce结账页自定义费用下单后金额不同步修复方案

问题根因

  • 自定义费用仅在前端结账页渲染,没有绑定WooCommerce全局订单计算钩子,下单时会话数据丢失,费用未写入订单数据库记录
  • 仅挂载了woocommerce_cart_calculate_fees钩子,没有同步绑定订单创建的钩子逻辑

修复步骤

  1. 全局挂载自定义费用计算逻辑
    将自定义费用的计算逻辑绑定到通用的购物车/订单计算钩子,确保全流程费用计算一致:
add_action( 'woocommerce_cart_calculate_fees', 'add_custom_fee_globally' );
function add_custom_fee_globally( $cart ) {
    // 跳过后台非AJAX请求避免干扰
    if ( is_admin() && ! defined( 'DOING_AJAX' ) ) {
        return;
    }
    // 替换为你实际的费用计算规则
    $custom_fee_amount = 15.00;
    $cart->add_fee( '附加服务费', $custom_fee_amount, false );
}
  1. 同步写入自定义费用到订单数据
    下单创建订单时,将购物车内的自定义费用同步写入订单记录,确保后续订单页读取数据正确:
add_action( 'woocommerce_checkout_create_order', 'sync_custom_fee_to_order', 10, 2 );
function sync_custom_fee_to_order( $order, $checkout_data ) {
    // 遍历购物车费用找到对应的自定义费用
    foreach ( WC()->cart->get_fees() as $fee_item ) {
        if ( $fee_item->name == '附加服务费' ) {
            $order->add_fee( $fee_item->name, $fee_item->amount, $fee_item->taxable, $fee_item->tax_class );
            break;
        }
    }
    // 重新计算订单总金额确保数值正确
    $order->calculate_totals();
}
  1. 验证修复效果
    代码部署后按以下步骤验证:
  • 清空网站缓存、浏览器缓存、WooCommerce购物车会话
  • 重新添加商品到购物车进入结账页,确认自定义费用显示正常
  • 走完全部下单流程,查看订单详情页总金额是否和结账页一致
  • 如果站点配置了缓存插件/CDN,需要将购物车、结账、订单页面添加到缓存排除列表,避免缓存导致的数据异常

内容的提问来源于stack exchange,提问作者John Bastian Dinglasan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 21:36:03