WooCommerce: автоматическое обновление остатков товаров при продаже

|

Проблема: почему остатки товаров не обновляются автоматически в WooCommerce

В стандартной установке WooCommerce при продаже товара его остаток должен автоматически уменьшаться. Однако в некоторых случаях, особенно при кастомных решениях, импортах или нестандартных сценариях продажи, количество на складе не обновляется, что ведёт к неверным данным и ошибкам при оформлении заказов.

Основные причины:

Как проверить текущие настройки и работу обновления остатков

Для начала убедитесь, что управление запасами включено:

WooCommerce > Настройки > Товары > Управление запасами > Включить управление запасами

Далее проверьте в карточке товара, что у него установлен тип продукта "простой" или "вариативный" с включённым управлением запасами.

Для теста создайте новый заказ в админке, оформите продажу товара с наличием на складе 10 штук и посмотрите, уменьшится ли количество после смены статуса заказа на "завершён".

Если остаток не меняется, значит, механизм обновления не работает корректно.

Пошаговое решение: автоматическое обновление остатков с использованием хуков

WooCommerce обновляет остаток при смене статуса заказа на "завершён". Если у вас кастомная логика оформления, добавьте следующий код в functions.php вашей темы или в собственный плагин:

add_action('woocommerce_order_status_completed', 'custom_reduce_stock_on_order_completed');
function custom_reduce_stock_on_order_completed($order_id) {
    if (!$order_id) return;
    $order = wc_get_order($order_id);
    if (!$order) return;
    // Проверяем, обновлялись ли уже остатки для этого заказа
    if (get_post_meta($order_id, '_stock_reduced', true)) return;
    foreach ($order->get_items() as $item) {
        $product = $item->get_product();
        if ($product && $product->managing_stock()) {
            $qty = $item->get_quantity();
            wc_update_product_stock($product, $qty, 'decrease');
        }
    }
    update_post_meta($order_id, '_stock_reduced', 'yes');
}

Этот код гарантирует уменьшение остатка только один раз при смене статуса на "завершён", что исключает двойное списание.

Что делать, если используется кастомный статус заказа?

Если у вас нестандартный статус, например "выполнен_проверено", замените хук на:

add_action('woocommerce_order_status_выполнен_проверено', 'custom_reduce_stock_on_order_completed');

Или используйте универсальный хук для смены статуса:

add_action('woocommerce_order_status_changed', 'custom_stock_update_on_status_change', 10, 4);
function custom_stock_update_on_status_change($order_id, $old_status, $new_status, $order) {
    if ($new_status === 'completed') {
        // Ваша логика уменьшения запасов (как выше)
    }
}

Проверка результата после внедрения кода

  1. Создайте тестовый заказ с товаром, у которого управляются запасы.
  2. Установите статус заказа на "Завершён" через админку WooCommerce.
  3. Проверьте обновление остатка товара в каталоге WooCommerce.
  4. Убедитесь, что после повторного смены статуса остаток не уменьшился повторно (проверка idempotentности).

Частые ошибки и как их исправить

Практические советы по безопасности и производительности

Сравнение вариантов обновления остатков в WooCommerce

МетодПлюсыМинусыКогда использовать
Стандартное управление WooCommerceНадёжно, автоматически при смене статусаНе работает с кастомными сценариямиДля стандартных магазинов
Кастомный код на хуках (пример выше)Гибко, контролируемо, можно подстроить под любые статусыТребует поддержки и тестированияПри кастомных процессах
Ручное обновление через SQLБыстрое обновление на уровне базыРиск ошибок, пропуск кэширования, конфликт с WooCommerceКрайний случай, при массовых правках
Как создать автоматический импорт постов в WordPress с поддержкой виджетов
24.03.2026
WooCommerce: автоматическое отключение неактивных методов оплаты
12.05.2026
Автоматическое удаление старых комментариев в WordPress: практические решения и примеры кода
21.03.2026
WooCommerce: автоматическое изменение стоимости товаров при акциях без плагинов
08.06.2026
WooCommerce: автоматическое изменение стоимости товаров при акциях без плагинов
30.06.2026
×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше