Как получить все покупки(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();
     }
     

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

    Ваш ответ

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