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

如何通过WooCommerce WC_Order_Query按元数据及订单号获取订单

我来帮你搞定这两个WooCommerce订单查询的问题,都是开发中经常碰到的场景,直接上解决方案:

1. 使用WC_Order_Query按元数据获取订单

WC_Order_Query本身就支持通过元数据筛选订单,你只需要在查询参数里加入meta_query数组即可,下面给几个常用的示例:

  • 基础场景:匹配特定元键和元值
    比如要获取所有元键为_my_custom_meta且元值为special_customer的订单:
$orders = wc_get_orders( array(
    'status' => 'completed', // 可选,可指定筛选订单状态
    'meta_query' => array(
        array(
            'key'     => '_my_custom_meta',
            'value'   => 'special_customer',
            'compare' => '=', // 默认就是=,可以省略
        ),
    ),
) );
  • 进阶场景:使用比较操作符
    如果需要更灵活的筛选,比如元值大于某个数字,或者包含特定字符串:
// 获取元键_total_spent值大于1000的订单
$orders = wc_get_orders( array(
    'meta_query' => array(
        array(
            'key'     => '_total_spent',
            'value'   => 1000,
            'type'    => 'numeric',
            'compare' => '>',
        ),
    ),
) );
  • 多条件元数据查询
    如果需要同时满足多个元数据条件,可以在meta_query里添加多个数组:
$orders = wc_get_orders( array(
    'meta_query' => array(
        'relation' => 'AND', // 可选,默认AND,也可以用OR
        array(
            'key'     => '_my_custom_meta',
            'value'   => 'special_customer',
        ),
        array(
            'key'     => '_order_total',
            'value'   => 500,
            'type'    => 'numeric',
            'compare' => '>=',
        ),
    ),
) );
2. 通过订单号而非订单ID获取订单(解决number参数无效问题)

你调用wc_get_orders( array( 'number' => '1000' ) )没生效,是因为wc_get_orders根本不支持number这个参数,得根据你的订单号类型来选择正确的查询方式:

情况1:默认订单号(和Post ID一致)

WooCommerce默认的订单号其实就是订单的Post ID,如果你用的是默认设置,直接用wc_get_order()传入订单号即可:

$order = wc_get_order( 1000 ); // 这里的1000就是订单号(等于Post ID)

如果不确定订单号是否对应Post ID,也可以用WC_Order_Query的p参数(对应Post ID):

$orders = wc_get_orders( array(
    'p' => 1000, // 通过Post ID(默认订单号)查询
) );
// 取第一个结果
if ( ! empty( $orders ) ) {
    $order = $orders[0];
}

情况2:自定义订单号(非Post ID)

如果你用了自定义订单号插件,或者自己开发了自定义订单号功能,订单号通常存储在_order_number这个元键里,这时候需要用meta_query来查询:

$orders = wc_get_orders( array(
    'meta_query' => array(
        array(
            'key'     => '_order_number',
            'value'   => '1000', // 你的自定义订单号
            'compare' => '=',
        ),
    ),
) );
// 取第一个结果
if ( ! empty( $orders ) ) {
    $order = $orders[0];
}

另外,如果你需要频繁通过自定义订单号查询订单,可以封装成一个小函数,方便复用:

function get_order_by_custom_number( $order_number ) {
    $orders = wc_get_orders( array(
        'meta_query' => array(
            array(
                'key'     => '_order_number',
                'value'   => $order_number,
                'compare' => '=',
            ),
        ),
        'limit' => 1, // 只取第一个结果,因为订单号唯一
    ) );
    return ! empty( $orders ) ? $orders[0] : false;
}

// 使用示例
$order = get_order_by_custom_number( '1000' );

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 23:37:37