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
相关产品推荐
相关产品推荐

