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

求助: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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 15:02:39