WooCommerce: получение купленных товаров для категории товаров с помощью SQL-запроса - PullRequest
1 голос
/ 14 апреля 2019

Я пытаюсь перечислить все купленные товары, которые относятся к определенной категории товаров, например, все заказы на футболки в категории товаров "одежда".

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

Может ли кто-нибудь предоставить пример запроса для получения всех заказов по определенной категории?

Я знаю, что это, вероятно, будет включать в себя wp_woocommerce_order_items и wp_terms таблицы, но потеряйтесь оттуда.

1 Ответ

1 голос
/ 14 апреля 2019

Следующий запрос SQL выдаст вам список идентификаторов продуктов, купленных хотя бы один раз, которые относятся к слагу категории «одежда»:

SELECT DISTINCT tr.object_id
FROM wp_term_relationships tr
INNER JOIN wp_term_taxonomy tt
    ON tr.term_taxonomy_id = tt.term_taxonomy_id
INNER JOIN wp_terms t
    ON tt.term_id = t.term_id
INNER JOIN wp_woocommerce_order_itemmeta oim
    ON tr.object_id = oim.meta_value
INNER JOIN wp_woocommerce_order_items oi
    ON oim.order_item_id = oi.order_item_id
INNER JOIN wp_posts as o
    ON oi.order_id = o.ID
WHERE tt.taxonomy = 'product_cat'
    AND t.slug = 'clothes'
    AND oim.meta_key = '_product_id'
    AND o.post_type = 'shop_order'
    AND o.post_status IN ('wc-completed','wc-processing')

Проверено и работает

Или в Wordpress, используя WPDB класс, это можно сделать, используя:

<code>global $wpdb;

$product_category = 'clothes'; // Term slug

$products_ids = $wpdb->get_col( "
    SELECT DISTINCT tr.object_id
    FROM wp_term_relationships tr
    INNER JOIN wp_term_taxonomy tt
        ON tr.term_taxonomy_id = tt.term_taxonomy_id
    INNER JOIN wp_terms t
        ON tt.term_id = t.term_id
    INNER JOIN wp_woocommerce_order_itemmeta oim
        ON tr.object_id = oim.meta_value
    INNER JOIN wp_woocommerce_order_items oi
        ON oim.order_item_id = oi.order_item_id
    INNER JOIN wp_posts as o
        ON oi.order_id = o.ID
    WHERE tt.taxonomy = 'product_cat'
    AND t.slug = '$product_category'
    AND oim.meta_key = '_product_id'
    AND o.post_type = 'shop_order'
    AND o.post_status IN ('wc-completed','wc-processing')
");

// Pre-formatted raw display (an array of products ids)
echo '<pre>'; print_r($products_ids); echo '
';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...