WooCommerce – скрипт статистики

ВОПРОС

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

Пример:

  • Наименование товара
  • В наличии: 10
  • Товары уже зарезервированы (но еще не оплачены): X
  • Продано предметов: Y

В настоящее время в woocommerce есть функция, которая показывает количество проданных товаров по каждому продукту, но учитывает как зарезервированные (ожидающие статус), так и проданные (выполненные), поэтому это другой вид подсчета.

Я написал запрос, который должен найти заказы, соответствующие статусу ожидания (wp_term_relationships.term_taxonomy_id = 46 ), но я не могу выбрать только один конкретный продукт, так как он учитывает все отложенные заказы в базе данных. Идентификатор продукта одинаков для wp_posts.ID и wp_woocommerce_order_itemmeta.meta_value = 250 .

Обратите внимание, что продукт и заказы находятся в одной таблице: wp_posts .

Вотмойзапрос:

SELECT COUNT(DISTINCT wp_posts.ID) 
FROM wp_posts, wp_postmeta, wp_term_relationships, wp_woocommerce_order_itemmeta oi 
 
WHERE wp_posts.ID = wp_postmeta.post_id
AND wp_posts.post_status = 'publish'
AND wp_posts.ID = wp_postmeta.post_id 
AND oi.meta_key = '_product_id'
AND oi.meta_value = 250
AND wp_posts.post_type = 'shop_order'
AND wp_term_relationships.object_id = wp_posts.ID
AND wp_term_relationships.term_taxonomy_id = 46

Любые идеи, как выбрать рассчитывать только для этого продукта?  Заранее спасибо.

ОТВЕТ

Как я и подозревал, мне нужно было отфильтровать еще одну таблицу, и это сработало!

Итак, недостающая строка : ii.order_id = wp_posts.ID и некоторые другие хитрости;)

SELECTCOUNT(DISTINCTwp_posts.ID)

 

FROMwp_posts, wp_postmeta, wp_term_relationships, wp_woocommerce_order_itemmeta oi, wp_woocommerce_order_items ii

 

WHEREwp_term_relationships.term_taxonomy_id = (xx – orderstatus id)

AND wp_term_relationships.object_id = wp_posts.ID

ANDoi.order_item_id = ii.order_item_id

ANDoi.meta_key = ‘_product_id’

ANDoi.meta_value = (yy – specific product id, the same id asinwp_posts)

ANDii.order_id = wp_posts.ID

ANDwp_postmeta.post_id = wp_term_relationships.object_id

ANDwp_posts.post_status = ‘publish’

Убедитесь, что вы не выбрали тип записи «shop_order», так как он даст неправильный результат 🙂 и обратите внимание, что у статуса «Полное» может быть немного больше значений, поскольку у woocommerce разные значения состояния для выполненного, удаленного, оплаченного и отмененного заказа.