在 WooCommerce WC_Order_Query 中获取具有特定元数据的订单

问题描述 投票:0回答:1

我使用“woocommerce_order_data_store_cpt_get_orders_query”挂钩将一些自定义元查询变量添加到 WC_Order_Query 函数。然而,添加的键似乎被查询忽略了。

我使用以下代码片段进行测试;

add_filter( 'woocommerce_order_data_store_cpt_get_orders_query', 'custom_order_query', 10, 2 );
function custom_order_query($query, $query_vars){
    
    if ( ! empty( $query_vars['zone_id'] ) ) {
    
        $query['meta_query'][] = array(
            'key' => '_wcgd_delivery_region',
            'value' => esc_attr( $query_vars['zone_id'] ),
            'compare' => '='
        );
    }
    return $query;
}

现在,当使用 WC_Order_query 时,我希望仅获取给定 zone_id 中的订单。但事实并非如此。

当我使用

请求订单列表时
`
$vars = array(
        'customer_id' => 2526,
        'limit' => '5',
        'status'         => 'processing',
        'zone_id'  => 4,
        'return'            => 'ids'
        );


$query = new WC_Order_Query( $vars );
print_r($query->get_orders());`
`

我获取给定 customer_id 的所有订单,而不是给定 customer_id/zone_id 的订单。

我在这里做错了什么?我正在抓狂...我刚刚遵循了 WooCommerce 文档,但我真的不明白为什么这不起作用。

php wordpress woocommerce metadata orders
1个回答
0
投票

您可以使用以下命令直接在查询中查询自定义元数据:

$orders_ids = wc_get_orders( array(
    'status'        => 'processing',
    'limit'         => 5,
    'customer_id'   => 2526,
    'meta_key'      => '_wcgd_delivery_region',
    'meta_value'    => 4,
    'meta_compare'  => '=',
    'return'        => 'ids'
) );

echo '<pre>'. print_r( orders_ids, true ) . '</pre>';

已测试且有效。

相关:使用自定义元键和元值扩展 wc_get_orders()

© www.soinside.com 2019 - 2024. All rights reserved.