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

Woocommerce 3.3.5:WC_Order::get_order_discount()已弃用,求替代函数

解决WooCommerce 3.3.5中WC_Order::get_order_discount()弃用的问题

嘿,我之前也碰到过这个插件不兼容的糟心事,给你几个实用的解决方向:

1. 找到正确的替代函数

WooCommerce 3.x版本重构了订单相关的方法,get_order_discount()被拆分成了两个更精准的方法:

  • $order->get_discount_total():获取不含税的订单折扣总额
  • $order->get_discount_tax():获取折扣对应的税额

如果原来的get_order_discount()返回的是含税的总折扣,那么可以用两者相加的方式替代:

$total_discount = $order->get_discount_total() + $order->get_discount_tax();

2. 两种修复方案

方案一:直接修改插件代码(快速但需注意备份)

找到woocommerce-gateway-paypal-pro插件中所有调用$order->get_order_discount()的地方,替换成上面的替代代码。比如:

  • 若原代码是$discount = $order->get_order_discount();,替换为$discount = $order->get_discount_total();(或根据需求用含税版本)

⚠️ 注意:这种方法的缺点是插件更新后修改会丢失,所以建议修改前备份,或者优先用下面的方案二。

方案二:添加兼容函数(无需修改原插件)

通过主题的functions.php文件或者自定义小插件,添加一个兼容的get_order_discount()方法,这样原插件的调用依然有效:

// 为WC_Order添加已弃用的get_order_discount()兼容方法
add_action('woocommerce_init', function() {
    if (!method_exists('WC_Order', 'get_order_discount')) {
        class WC_Order_Compat extends WC_Order {
            public function get_order_discount() {
                // 这里根据实际需求选择返回不含税或含税折扣
                return $this->get_discount_total();
                // 若需要含税总额,注释上面一行,启用下面一行
                // return $this->get_discount_total() + $this->get_discount_tax();
            }
        }
        // 替换原WC_Order类为兼容类
        class_alias('WC_Order_Compat', 'WC_Order');
    }
}, 10);

这个方法的好处是插件更新后不会影响你的修改,而且完全兼容原插件的调用逻辑。

验证方法

修改后可以测试一下PayPal Pro支付流程,确认订单折扣计算正确、没有报错即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:30:33