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

WooCommerce修改显示运费总额:代码实现遇0值问题求助

解决WooCommerce运费折扣计算返回0的问题

嘿,我碰到过这个问题!你代码返回0的核心原因是:WC()->cart->get_cart_shipping_total()默认返回的是带货币符号的格式化字符串(例如 "$20.00"),而不是可以直接运算的数字类型。PHP尝试将这类字符串与数字相乘时,会自动把非数字开头的字符串转为0,结果自然就是0了。

基础修复:正确计算并显示折扣后运费

要获取纯数字的运费总额,给get_cart_shipping_total()传入第二个参数false即可,它会返回不含格式的原始数值:

<?php 
$percentage = 50;
// 获取纯数字的当前运费总额
$current_shipping_cost = WC()->cart->get_cart_shipping_total( false );
// 计算折扣后的运费
$discounted_shipping = $current_shipping_cost * $percentage / 100;
// 输出带货币格式的运费(符合WooCommerce规范)
echo wc_price( $discounted_shipping );
?>

进阶:实际修改结算时的运费(不只是前端显示)

如果你的需求是真正降低结算时的运费,而不只是修改前端显示的数值,那上面的代码只能改表面,实际订单还是会按原价结算。这时候需要用WooCommerce的钩子来修改运费费率,示例代码如下:

add_filter( 'woocommerce_package_rates', 'apply_shipping_discount_percentage', 10, 2 );
function apply_shipping_discount_percentage( $rates, $package ) {
    $discount_percentage = 50; // 设置你的折扣百分比

    foreach ( $rates as $rate_key => $rate ) {
        // 跳过免费运费,避免不必要的计算
        if ( $rate->cost <= 0 ) continue;

        // 计算折扣后的运费成本
        $discounted_cost = $rate->cost * ( 100 - $discount_percentage ) / 100;
        // 更新运费成本
        $rates[$rate_key]->cost = $discounted_cost;

        // 如果有税费(比如燃油附加费),也同步应用折扣
        foreach ( $rate->taxes as $tax_key => $tax ) {
            $rates[$rate_key]->taxes[$tax_key] = $tax * ( 100 - $discount_percentage ) / 100;
        }
    }

    return $rates;
}

把这段代码放到你的主题functions.php文件或者自定义插件里,它会在计算运费时自动应用折扣,前端显示和实际结算都会使用折扣后的价格。

小提醒

  • 确保代码在WooCommerce初始化之后运行,比如放在主题的functions.php或自定义插件中,不要随便在未初始化的模板里调用。
  • 测试前记得清空购物车并刷新页面,因为WooCommerce会缓存运费费率,不刷新可能看不到变化。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:16:45