Вопрос или проблема
У меня есть довольно специфическая задача — показать общее количество продуктов в заказах с конкретным статусом заказа. Предположим, есть 52 заказа со статусом “В обработке”, я пытаюсь получить общее количество товарных позиций в этих заказах, чтобы затем отобразить это на фронтенде.
Пример: “Клиенты, похожие на вас, сейчас играют с 6,829 антистресс-игрушками!”
Где число будет фактически общим количеством товарных позиций в заказах со статусом “Завершен”.
Я думаю, понимаю, как добиться этого с логической точки зрения — выполнить запрос, чтобы отфильтровать базу данных по заказам с конкретным статусом заказа, затем получить общее количество товарных позиций в каждом заказе и все это сложить, но мне трудно понять, как это осуществляется в коде, я разработчик фронтенда.
Буду очень признателен за любые подсказки, спасибо большое.
@lukecav ранее разместил фрагмент, который почти выполняет эту задачу:
https://gist.github.com/lukecav/05afef12feaf980c121da9afb9291ad5
Если мы изменим извлекаемую колонку на “order_item_id”, он извлечет количество уникальных товарных позиций, соответствующих критериям:
function get_order_items_by_product_id( $product_id, $order_status = array( 'wc-completed' ) ){
global $wpdb;
$results = $wpdb->get_col("
SELECT order_items.order_item_id
FROM {$wpdb->prefix}woocommerce_order_items as order_items
LEFT JOIN {$wpdb->prefix}woocommerce_order_itemmeta as order_item_meta ON order_items.order_item_id = order_item_meta.order_item_id
LEFT JOIN {$wpdb->posts} AS posts ON order_items.order_id = posts.ID
WHERE posts.post_type="shop_order"
AND posts.post_status IN ( '" . implode( "','", $order_status ) . "' )
AND order_items.order_item_type="line_item"
AND order_item_meta.meta_key = '_product_id'
AND order_item_meta.meta_value="$product_id"
");
return $results;
}
Надеюсь, это поможет 🙂
Ответ или решение
Чтобы решить задачу подсчёта общего количества продуктов в заказах с определённым статусом, необходимо использовать SQL-запрос для извлечения необходимых данных из базы данных WooCommerce. Давайте разберём решение по шагам, чтобы добиться требуемого результата.
Шаг 1: Понимание структуры данных
В WooCommerce данные о заказах хранятся в нескольких связанных таблицах:
wp_posts
— основная таблица, где хранятся все заказы. Каждый заказ имеет типshop_order
.wp_woocommerce_order_items
— таблица, содержащая элементы заказов. Каждый элемент может быть записан какline_item
.wp_woocommerce_order_itemmeta
— таблица, хранящая метаданные элементов. Здесь мы можем найти информацию о продукте, включая его идентификатор.
Шаг 2: SQL-запрос для извлечения данных
Запрос должен выбрать все строки из таблицы wp_woocommerce_order_items
на основе указанного статуса заказа и посчитать количество продуктов.
Вот пример SQL-запроса:
SELECT COUNT(order_items.order_item_id) as total_items
FROM wp_woocommerce_order_items as order_items
JOIN wp_posts as posts ON order_items.order_id = posts.ID
WHERE posts.post_type = 'shop_order'
AND posts.post_status = 'wc-completed'
AND order_items.order_item_type = 'line_item';
Шаг 3: PHP-функция для выполнения запроса
Используя PHP и класс wpdb
, мы можем выполнить запрос и получить общее количество продуктов. Вот пример функции, которая выполняет эту задачу:
function get_total_product_count_by_order_status($order_status = 'wc-completed') {
global $wpdb;
$query = $wpdb->prepare("
SELECT COUNT(order_items.order_item_id) as total_items
FROM {$wpdb->prefix}woocommerce_order_items as order_items
JOIN {$wpdb->prefix}posts as posts ON order_items.order_id = posts.ID
WHERE posts.post_type = %s
AND posts.post_status = %s
AND order_items.order_item_type = %s",
'shop_order', $order_status, 'line_item');
$total_count = $wpdb->get_var($query);
return $total_count ? $total_count : 0; // Возвращаем 0 если данных нет
}
Шаг 4: Вызов функции и вывод результата
После создания функции, мы можем вызвать её и вывести результат на фронтенде. Например:
$order_status = 'wc-completed'; // Укажите статус, который вам нужен
$total_products = get_total_product_count_by_order_status($order_status);
echo "Клиенты, как вы, сейчас покупают <strong>{$total_products}</strong> товаров!";
Итог
Теперь мы знаем, как подсчитать общее количество товаров в заказах с определённым статусом с помощью SQL-запроса и PHP-функции. Это решение может быть интегрировано в ваш проект WooCommerce и использовано для вывода актуальной информации о заказах на фронтенде.
SEO-оптимизация
Для улучшения видимости в поисковых системах стоит использовать фразы, связанные с запросом, такие как "отображение количества товаров в заказах WooCommerce", "SQL-запросы для подсчёта продуктов" и "статистика заказов WooCommerce". Это поможет не только в решении текущей задачи, но и в повышении вашего общего онлайн-присутствия.