WooCommerce中从订单总额剔除运费:订单确认页不生效如何解决?
WooCommerce订单确认页剔除运费解决方案
原有测试代码存在3个问题:
- 钩子注册时声明了接收2个参数,但回调函数只写了1个参数,逻辑运行异常
- 计算逻辑写死了减10的固定值,没有替换为实际运费金额
- 没有处理运费对应的税费部分,也没有同步修改订单的运费字段,会导致订单明细和总额不匹配
你可以直接用以下代码替换原有订单处理阶段的代码:
add_action( 'woocommerce_checkout_create_order', 'adjust_order_total_remove_shipping', 20, 2 ); function adjust_order_total_remove_shipping( $order, $data ) { // 获取运费金额(不含税) $shipping_total = $order->get_shipping_total(); // 获取运费对应的税费总额 $shipping_tax_total = $order->get_shipping_tax(); // 获取原订单总额 $original_total = $order->get_total(); // 计算新总额 = 原总额 - 运费 - 运费对应的税费 $new_total = $original_total - $shipping_total - $shipping_tax_total; // 可选:将订单运费和运费税设为0,避免后端订单详情显示运费造成混淆 $order->set_shipping_total(0); $order->set_shipping_tax(0); // 重置运费税明细 $order->set_shipping_taxes(array()); // 设置新的订单总额 $order->set_total( $new_total ); }
注意事项
- 之前的购物车、结账页代码可以正常保留使用
- 如果你的站点没有启用税费计算,可以删掉所有和
shipping_tax相关的逻辑,直接用$new_total = $original_total - $shipping_total计算即可 - 测试前先清空WooCommerce缓存、站点缓存和浏览器缓存,建议用无痕模式测试完整下单流程
- 如果还是不生效,可以尝试调高代码的优先级(把钩子中的20改为999),排除其他插件/自定义代码的逻辑冲突
内容的提问来源于stack exchange,提问作者Lee Baz
相关产品推荐
相关产品推荐

