Отобразить общее количество продуктов в заказах с определенным статусом заказа.

Вопрос или проблема

У меня есть довольно специфическая задача — показать общее количество продуктов в заказах с конкретным статусом заказа. Предположим, есть 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 данные о заказах хранятся в нескольких связанных таблицах:

  1. wp_posts — основная таблица, где хранятся все заказы. Каждый заказ имеет тип shop_order.
  2. wp_woocommerce_order_items — таблица, содержащая элементы заказов. Каждый элемент может быть записан как line_item.
  3. 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". Это поможет не только в решении текущей задачи, но и в повышении вашего общего онлайн-присутствия.

Оцените материал
Добавить комментарий

Капча загружается...