Как получить все покупки(order) по продукту в woocommerce?

Решено

Здравствуйте, мне нужно получить все покупки и данные о них, которые были по определенному продукту. Через стандартный wp_query  не получается так сделать, потому что я не знаю откуда в ордерах можно получить по какому продукту была произведена оплата. скажите как можно получить информацию о покупках по определенному продукту?

Добавить Комментарий
Ответ

Можно сделать произвольный запрос, который вернет нам массив содержащий id ордеров которые были по продукту:

 global $wpdb;
$order_ids = $wpdb->get_col($wpdb->prepare("
 SELECT order_id
 FROM {$wpdb->prefix}woocommerce_order_items
 WHERE order_item_id IN ( SELECT order_item_id FROM {$wpdb->prefix}woocommerce_order_itemmeta WHERE meta_key = '_product_id' AND meta_value = %d )
 AND order_item_type = 'line_item'
 ", $id_product));
 

$id_product — id продукта

теперь имея массив с ордерами мы можем их вывести через wp_query:

 if (!empty($order_ids)) {
 // задаем нужные нам критерии выборки данных из БД
 $args = array(
 'posts_per_page' => -1,
 'post_type' => 'shop_order',
 'post_status' => 'wc-completed',
 'post__in' => $order_ids
 );
$query = new WP_Query($args);
 // Цикл
 if ($query->have_posts()) {
 while ($query->have_posts()) {
 $query->the_post();
 // тут ваш код
 }
 } else {
 // Постов не найдено
 }
 /* Возвращаем оригинальные данные поста. Сбрасываем $post. */
 wp_reset_postdata();
 }
 

Добавить Комментарий

Ваш ответ

Размещая свой ответ, вы соглашаетесь с правилами сайта.