Как получать заказы по пользовательским метаданным в WooCommerce
Я хотел знать, как я могу видеть все заказы с:
- мета-ключ пользователя:
friseur
- мета-значение пользователя:
TestFriseur
Это мой код:
// Users query
$user_ids = (array) get_users([
'role' => 'customer',
'number' => - 1,
'fields' => 'ID',
'meta_query' => [
'relation' => 'OR',
[
'key' => 'TestFriseur',
'compare' => '!=',
'value' => 1
],
[
'key' => 'TestFriseur',
'compare' => 'NOT EXISTS'
]
],
]);
// Orders query (using the users IDs from the user query)
$orders = wc_get_orders([
'limit' => - 1,
'status' => ['on-hold','processing','completed'],
'customer_id' => $user_ids,
]);
// Loop through Order IDs
foreach( $orders as $order ) {
// Get the Order ID
echo $order_id = $order->get_id();
// And so on …
}
Но, к сожалению, без желаемого результата. Любой совет?
1 ответ
Чтобы получать заказы по метаданным пользователя, вы можете использовать собственный SQL-запрос с
WPDB
класс вроде:
global $wpdb;
// Settings
$meta_key = 'friseur';
$meta_value = 'TestFriseur';
$order_ids = $wpdb->get_col( "
SELECT DISTINCT ID
FROM {$wpdb->prefix}posts o
INNER JOIN {$wpdb->prefix}postmeta om
ON o.ID = om.post_id
INNER JOIN {$wpdb->prefix}usermeta um
ON om.meta_value = um.user_id
WHERE o.post_type = 'shop_order'
AND o.post_status IN ( 'wc-on-hold','wc-processing','wc-completed' )
AND om.meta_key = '_customer_user'
AND um.meta_key = '$meta_key'
AND um.meta_value = '$meta_value'
");
// Loop through order IDs
foreach( $order_ids as $order_id ) {
echo '<p>Order id = ' . $order_id . '</p>';
// Get an instance of the WC_Order Object
$order = wc_get_order( $order_id );
// And so on …
}