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

В чем проблема с товарами, которых нет в наличии

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

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

  • Перейдите в админку WooCommerce > Товары и выберите товар с нулевым количеством.
  • Откройте страницу редактирования товара и проверьте вкладку "Запасы": активирована ли опция "Управление запасами на уровне товара" и установлен ли статус наличия.
  • На фронтенде откройте страницу товара с нулевым запасом и убедитесь, что кнопка "Купить" доступна.

Если товары доступны для покупки при нулевом запасе, значит автоматическое отключение не настроено.

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

1. Настройка управления запасами в WooCommerce

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

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

Это позволит системе автоматически отслеживать наличие товара.

2. Использование статуса наличия товара

По умолчанию WooCommerce позволяет задать статус наличия:

  • В наличии
  • Нет в наличии
  • Под заказ

В настройках товара выберите "Нет в наличии" для товаров с нулевым запасом.

3. Автоматизация через код: отключение товаров с нулевым запасом

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

add_action('woocommerce_product_set_stock_status', 'disable_product_if_out_of_stock', 10, 3);
function disable_product_if_out_of_stock($product_id, $stock_status, $product) {
    if ($stock_status === 'outofstock') {
        $post = array(
            'ID' => $product_id,
            'post_status' => 'draft' // переводим в черновики, чтобы не показывался
        );
        wp_update_post($post);
    } else {
        // Если товар снова в наличии, публикуем
        $post = array(
            'ID' => $product_id,
            'post_status' => 'publish'
        );
        wp_update_post($post);
    }
}

Этот хук срабатывает при изменении статуса запаса товара, переводя товар в статус "черновик", если он отсутствует на складе, и обратно в "опубликовано", когда товар появляется.

4. Проверка работы кода

  • Измените количество товара на 0 в админке.
  • Сохраните изменения.
  • Проверьте, что товар исчез с витрины и страницы каталога.
  • Увеличьте количество товара на любое положительное число и сохраните.
  • Убедитесь, что товар снова отображается на сайте.

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

Для полной проверки:

  • Проверьте фронтенд сайта с разными товарами: с нулевым запасом и с положительным.
  • Проверьте URL товара в статусе "черновик" — он должен быть недоступен (ошибка 404).
  • Проверьте в админке, что статус товара меняется автоматически.
  • Для теста можно использовать WP-CLI:
    wp post list --post_status=draft --post_type=product
    — здесь должны появиться отключенные товары.

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

  • Код не срабатывает при изменении количества: убедитесь, что опция управления запасами включена в настройках WooCommerce.
  • Товар не исчезает с фронтенда: проверьте, что статус "черновик" действительно исключен из публичного вывода. Если используется кэширование — очистите кэш.
  • Конфликты с плагинами SEO или кэширования: иногда плагины могут сохранять устаревший статус товара. Временно отключите их для проверки.
  • Изменение статуса товара влияет на SEO: если важно сохранить URL, вместо перевода в черновик можно использовать альтернативный статус или мета-поле для фильтрации товаров на фронтенде.

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

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

Сравнение вариантов решения отключения товаров по запасам

МетодПлюсыМинусыКогда использовать
Ручное изменение статуса товараПросто, не требует кодаТрудозатратно при большом каталогеМаленький магазин
Автоматизация через код (из статьи)Полная автоматизация, быстрое срабатываниеТребует навыков, возможны конфликты с плагинамиСредние и большие магазины
Использование сторонних плагинов управления запасамиРасширенный функционал и настройкаДополнительная нагрузка на сайт, стоимостьКрупные проекты с требованиями к интеграции
Как временно отключить WooCommerce без потери данных
17.02.2026
Как установить ограничение на регистрацию пользователей в WordPress
14.07.2026
Как использовать AJAX в WordPress для динамического обновления контента
20.02.2026
Использование WP GPT для автоматического создания контента в WordPress
01.01.2026
Автоматический импорт продуктов из CSV в WooCommerce: пошаговое руководство
17.03.2026