求助:WooCommerce 4.3自定义函数触发WC_Abstract_Legacy_Order错误排查
排查WC_Abstract_Legacy_Order->__get错误的解决方法
首先,你碰到的这个wc_doing_it_wrong错误,根源是WooCommerce从3.0版本开始就废弃了直接访问订单对象属性的做法,到4.3版本已经会明确抛出这个提示。你的代码里刚好踩了这个坑——直接调用了订单对象的status和total属性,没有用官方推荐的getter方法。
具体问题点和修改方案
你的代码里这段循环处理订单的部分有两处过时调用:
foreach ($orders as $order) { if ( $order->status == 'completed' ) { if ( $order->total > 14.99 ) { $completed_order_count++; } } }
需要改成WooCommerce提供的标准方法:
- 把
$order->status替换为$order->get_status() - 把
$order->total替换为$order->get_total()
修改后的循环代码:
foreach ($orders as $order) { if ( $order->get_status() == 'completed' ) { if ( $order->get_total() > 14.99 ) { $completed_order_count++; } } }
额外优化建议(可选)
如果你的店铺订单量比较大,循环所有订单再过滤的效率很低,可以直接在wc_get_orders的参数里指定订单状态和总金额条件,减少需要处理的订单数量:
$args = array( 'customer_id' => $customer, 'status' => 'completed', 'meta_query' => array( array( 'key' => '_order_total', 'value' => 14.99, 'compare' => '>', 'type' => 'DECIMAL' ) ) ); $qualifying_orders = wc_get_orders($args); $completed_order_count = count($qualifying_orders);
这样就不用手动循环统计,直接获取符合条件的订单数量即可,性能会更好。
内容的提问来源于stack exchange,提问作者Demuri Celidze
相关产品推荐
相关产品推荐

