我使用“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 文档,但我真的不明白为什么这不起作用。
您可以使用以下命令直接在查询中查询自定义元数据:
$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>';
已测试且有效。