WooCommerce: как автоматически отключать товары после завершения продаж

Проблема: необходимость скрывать товары после завершения продаж

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

Диагностика проблемы

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

  • В админке WordPress откройте карточку товара.
  • Перейдите на вкладку Инвентарь и убедитесь, что включено управление запасами (Manage stock? должно быть отмечено).
  • Проверьте текущий остаток (Stock quantity).
  • Обратите внимание, что при достижении нуля статус товара обычно меняется на Out of stock, но сам товар остаётся опубликованным и видимым.

Это приводит к тому, что товар отображается в каталоге и может сбивать с толку покупателей.

Решение: автоматическое изменение статуса товара при нулевом запасе

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

Пример кода для автоматического отключения товара

add_action('woocommerce_product_set_stock', 'auto_draft_product_when_out_of_stock', 10, 1);
function auto_draft_product_when_out_of_stock( $product ) {
    if ( ! $product->managing_stock() ) {
        return; // Управление запасом отключено
    }

    $stock = $product->get_stock_quantity();
    $status = $product->get_status();

    if ( $stock !== null && $stock <= 0 && $status !== 'draft' ) {
        $product->set_status('draft');
        $product->save();
    } elseif ( $stock > 0 && $status === 'draft' ) {
        $product->set_status('publish');
        $product->save();
    }
}

Этот хук woocommerce_product_set_stock срабатывает при обновлении запасов товара. Если количество становится 0 или меньше, статус меняется на draft (товар скрывается). При пополнении запаса статус возвращается в publish.

Альтернативный вариант: изменение статуса на "Out of stock" без скрытия

Если не хотите скрывать товар, а только показывать, что он отсутствует, убедитесь, что в настройках WooCommerce включена опция "Скрывать отсутствующие товары из каталога" (WooCommerce > Настройки > Товары > Запасы). Но этот метод не всегда удобен для SEO и пользовательского опыта.

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

  • Обновите запас товара до 0 через админку или программно.
  • Обновите страницу товара на сайте — товар должен исчезнуть из каталога и стать недоступным.
  • Повторно увеличьте запас — товар должен снова появиться в каталоге.
  • Проверьте логи ошибок и убедитесь, что не возникает предупреждений PHP.

Частые ошибки и их устранение

  • Код не срабатывает при обновлении запасов через импорт или сторонние плагины. Проверяйте, что сторонние инструменты триггерят хук woocommerce_product_set_stock. Если нет, используйте хук save_post_product с дополнительной логикой.
  • Товар не возвращается в публикацию при пополнении запаса. Проверьте, что условие на увеличение запаса прописано правильно (в коде выше это учитывается).
  • Потеря SEO-рейтинга после смены статуса на draft. Рассмотрите альтернативу с мета-robots или редиректами, если критично сохранить страницы в индексе.
  • Конфликт с кэшированием. Очистите кэш сайта и браузера после применения изменений.

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

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

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

МетодПлюсыМинусыКод/Плагин
Изменение статуса на draft (код)Полное скрытие, контроль статусаПотеря SEO, требуется кодПример из статьи
Настройка WooCommerce "Скрывать отсутствующие товары"Простота, без кодаТовар остается опубликован, влияет на видимостьВстроенная настройка WooCommerce
Плагины управления запасами и видимостьюДоп. функции и удобствоМожет замедлять сайт, зависит от плагинаWooCommerce Stock Manager и др.
WooCommerce: как автоматически создавать купоны при оформлении заказа
19.06.2026
WooCommerce: автоматическое удаление неактивных заказов по расписанию с помощью WP-Cron
19.07.2026
Как создать автоматические уведомления о новых курсах в WordPress
10.03.2026
Как создать многоуровневую навигацию в WordPress с помощью кода и плагинов
24.03.2026
Как добавить AJAX в WordPress без jQuery: практическое руководство
09.11.2025