Автоматическое отключение товаров в WooCommerce при отсутствии на складе

Диагностика проблемы: почему товары остаются активными при нулевом остатке

В стандартной конфигурации WooCommerce товары с нулевым запасом могут оставаться видимыми и доступными для покупки, если не настроено правильное управление запасами. Это приводит к неудобствам для пользователей и потерям продаж, так как покупатели пытаются заказать отсутствующий товар.

Чтобы понять, почему товар остаётся активным, проверьте следующие моменты:

  • Включено ли управление запасами в настройках WooCommerce.
  • Настроена ли опция «Разрешить покупку при отсутствии товара» (Backorders).
  • Статус товара (опубликован/черновик/отключен).
  • Наличие кастомного кода или плагинов, влияющих на видимость товаров.

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

1. Включите управление запасами WooCommerce

Перейдите в WooCommerce > Настройки > Товары > Запасы и убедитесь, что опция Включить управление запасами активирована.

2. Запретите покупки при отсутствии товара

В той же вкладке уберите галочку с «Разрешить покупки при отсутствии товара».

3. Добавьте код для автоматического изменения статуса товара

Для автоматического отключения товаров, когда их запас достигает нуля или меньше, используйте следующий код в functions.php вашей темы или в плагине для кастомных функций:

add_action('woocommerce_reduce_order_stock', 'auto_disable_out_of_stock_products', 10, 1);
function auto_disable_out_of_stock_products($order) {
    if (!$order) return;
    foreach ($order->get_items() as $item) {
        $product = $item->get_product();
        if (!$product || !$product->managing_stock()) continue;

        $stock_quantity = $product->get_stock_quantity();
        if ($stock_quantity <= 0 && $product->get_status() !== 'draft') {
            $product->set_status('draft'); // Отключаем товар
            $product->save();
        }
    }
}

Этот хук срабатывает после уменьшения запаса при завершении заказа и меняет статус товара на draft, скрывая его с витрины.

4. Запланированная проверка запасов (опционально)

Чтобы автоматически проверять и отключать товары с нулевым запасом вне зависимости от заказов, можно добавить WP-Cron задачу:

add_action('auto_disable_out_of_stock_cron', 'auto_disable_out_of_stock_products_cron');
function auto_disable_out_of_stock_products_cron() {
    $args = [
        'status' => 'publish',
        'limit' => -1,
        'stock_status' => 'outofstock'
    ];
    $products = wc_get_products($args);
    foreach ($products as $product) {
        if ($product->get_stock_quantity() <= 0) {
            $product->set_status('draft');
            $product->save();
        }
    }
}

// Добавление задачи в WP-Cron
if (!wp_next_scheduled('auto_disable_out_of_stock_cron')) {
    wp_schedule_event(time(), 'hourly', 'auto_disable_out_of_stock_cron');
}

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

Чтобы удостовериться, что товары отключаются, проверьте:

  • После оформления заказа с товарами, у которых запас достиг нуля, статус товара меняется на draft.
  • Товары со статусом draft не отображаются на витрине и в поиске WooCommerce.
  • При использовании WP-Cron можно вручную запустить событие или дождаться его срабатывания и убедиться, что товары с нулевым запасом также отключаются.

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

  • Код не срабатывает после оформления заказа: Проверьте, правильно ли передается объект $order в функцию. В WooCommerce 3+ нужно использовать хуки с правильными аргументами, например, woocommerce_reduce_order_stock передает объект $order.
  • Товары не скрываются, хотя запас равен нулю: Убедитесь, что товар управляет запасами (managing_stock() возвращает true) и статус меняется именно на draft или другой, который скрывает продукт.
  • WP-Cron задача не запускается: Проверьте настройки Cron, попробуйте вызвать задачу вручную через WP-CLI команду wp cron event run auto_disable_out_of_stock_cron.
  • Покупатели всё равно могут заказать товар: Проверьте в настройках WooCommerce, что отключена опция «Разрешить покупки при отсутствии товара».

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

  • Обрабатывайте операции массового изменения товаров вне пиковых нагрузок (например, ночью), чтобы не создавать нагрузку на сервер.
  • Сохраняйте резервные копии базы данных перед добавлением кода, который меняет статусы товаров массово.
  • Для больших каталогов используйте пагинацию при выборке товаров в WP-Cron, чтобы избежать превышения лимитов памяти и времени выполнения.
  • Если используете сторонние плагины управления запасами, проверьте совместимость с вашим кодом.

Сравнение решений: плагин vs кастомный код

КритерийПлагинКастомный код
ГибкостьОграничена функционалом плагинаМаксимальная, можно подстроить под любые требования
НагрузкаВ зависимости от плагина, может быть тяжелееОптимизируемая, зависит от реализации
ПоддержкаЕсть поддержка разработчикаТребуется самостоятельное сопровождение
Возможность кастомизацииОграничена настройкамиНеограничена
СтоимостьЧасто платные решенияБесплатно, требует времени на разработку
Как создать динамические формы в WordPress с помощью REST API
27.01.2026
Автоматическое создание скидки на первую покупку в WooCommerce через код
30.05.2026
Как создать уникальный отзывный блок в WordPress с помощью плагинов и кода
09.04.2026
Как установить автоматическое обновление тем и плагинов WordPress без рисков
16.12.2025
Автоматический импорт продуктов из CSV в WooCommerce: пошаговое руководство
17.03.2026