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

调用WC_Order类获取WooCommerce订单数据时提示类未找到错误

解决WC_Order类未找到的问题及获取订单数据的正确方式

报错原因

直接实例化WC_Order时出错,核心原因是代码执行时机过早(WooCommerce核心文件还未加载),或者未提前检查WooCommerce是否已激活。

解决方案

1. 确保代码在WooCommerce加载后执行

把订单处理代码挂到WordPress的钩子上,比如woocommerce_init或wp_loaded,确保WooCommerce核心类已经完成加载:

add_action('woocommerce_init', 'your_plugin_process_order_data');
function your_plugin_process_order_data() {
    // 订单处理逻辑写在这里
}

2. 用官方推荐的wc_get_order()获取订单对象

WooCommerce官方不推荐直接实例化WC_Order,而是使用wc_get_order()函数,它会自动处理类加载和订单对象的有效性校验:

add_action('woocommerce_init', 'your_plugin_process_order_data');
function your_plugin_process_order_data() {
    // 先检查WooCommerce是否激活
    if (!class_exists('WooCommerce')) {
        return;
    }

    $order_id = 1413;
    $order = wc_get_order($order_id);

    // 校验订单是否存在
    if (!$order) {
        // 可添加订单不存在的处理逻辑
        return;
    }

    // 获取所需数据
    // 客户姓名
    $customer_name = $order->get_billing_first_name() . ' ' . $order->get_billing_last_name();

    // 收货地址信息
    $shipping_address = array(
        'first_name' => $order->get_shipping_first_name(),
        'last_name' => $order->get_shipping_last_name(),
        'address_1' => $order->get_shipping_address_1(),
        'address_2' => $order->get_shipping_address_2(),
        'city' => $order->get_shipping_city(),
        'state' => $order->get_shipping_state(),
        'postcode' => $order->get_shipping_postcode(),
        'country' => $order->get_shipping_country()
    );

    // 订单商品信息(名称、描述等)
    $order_items = array();
    foreach ($order->get_items() as $item_id => $item) {
        $product = $item->get_product();
        $order_items[] = array(
            'name' => $item->get_name(),
            'description' => $product ? $product->get_description() : '',
            'quantity' => $item->get_quantity()
        );
    }

    // 这里用获取到的数据发起其他API调用即可
}

3. 额外注意事项

  • 禁止在插件根文件直接执行订单代码,必须通过钩子触发,避免加载顺序冲突。
  • 每次获取订单后务必校验订单是否存在,防止无效订单ID引发新错误。
  • 优先使用WooCommerce提供的getter方法(如get_billing_first_name()),而非直接读取get_data()返回的数组,提升版本兼容性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 10:25:22