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

WooCommerce wc_get_orders的meta_query逻辑及匹配问题咨询

WooCommerce wc_get_orders meta_query 逻辑设置详解

问题1:同一meta_key实现OR逻辑

要实现同一meta_key下的OR匹配(比如value LIKE 'hello kitty' OR value LIKE 'hi dog'),不能直接给value传数组(LIKE不支持数组值,会触发致命错误),正确做法是在meta_query里嵌套子条件数组,并显式设置子条件的relation为OR:

$orders = wc_get_orders(
    array(
        'limit'   => -1,
        'return'  => 'objects',
        'orderby' => 'date',
        'order'   => 'ASC',
        'meta_query'    => array(
            'relation' => 'OR', // 指定子条件间用OR逻辑
            array(
                'key'     => 'custom_meta_data',
                'value'   => 'hello kitty',
                'compare' => 'LIKE'
            ),
            array(
                'key'     => 'custom_meta_data',
                'value'   => 'hi dog',
                'compare' => 'LIKE'
            )
        ),
        'type'      => 'shop_order',
    )
);

默认情况下meta_query的子条件会用AND逻辑,所以必须手动设置relation为OR才能达到你要的效果。

问题2:不同meta_key的AND/OR逻辑

实现AND逻辑(默认行为)

如果需要同时满足两个不同meta_key的条件,直接在meta_query里添加多个条件即可,默认就是AND逻辑:

$orders = wc_get_orders(
    array(
        'limit'   => -1,
        'return'  => 'objects',
        'orderby' => 'date',
        'order'   => 'ASC',
        'meta_query'    => array(
            // 默认relation为AND,两个条件必须同时满足
            array(
                'key'     => 'meta_key_1',
                'value'   => 'value_1',
                'compare' => '='
            ),
            array(
                'key'     => 'meta_key_2',
                'value'   => 'value_2',
                'compare' => 'LIKE'
            )
        ),
        'type'      => 'shop_order',
    )
);

实现OR逻辑

要满足任意一个不同meta_key的条件,只需给外层meta_query设置relation为OR:

$orders = wc_get_orders(
    array(
        'limit'   => -1,
        'return'  => 'objects',
        'orderby' => 'date',
        'order'   => 'ASC',
        'meta_query'    => array(
            'relation' => 'OR', // 子条件满足其一即可
            array(
                'key'     => 'meta_key_1',
                'value'   => 'value_1',
                'compare' => '='
            ),
            array(
                'key'     => 'meta_key_2',
                'value'   => 'value_2',
                'compare' => 'LIKE'
            )
        ),
        'type'      => 'shop_order',
    )
);

问题3:LIKE的%添加与精确短语匹配

  • 关于自动添加%:WooCommerce的LIKE比较符不会自动在值两端添加%,如果需要模糊匹配(比如字段值包含某字符串),必须手动在value里加上%,例如:
    array(
        'key'     => 'custom_meta_data',
        'value'   => '%hello kitty%', // 手动加%实现包含匹配
        'compare' => 'LIKE'
    )
    
  • 精确短语匹配:直接使用compare为=即可,此时会严格匹配字段值与给定的value:
    array(
        'key'     => 'custom_meta_data',
        'value'   => 'hello kitty', // 精确匹配该短语
        'compare' => '='
    )
    
    如果需要区分大小写的精确匹配,可以配合BINARY:
    array(
        'key'     => 'custom_meta_data',
        'value'   => 'Hello Kitty',
        'compare' => 'BINARY ='
    )
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 00:02:10