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

Диагностика проблемы с отображением товаров без наличия

При управлении интернет-магазином на WooCommerce часто возникает необходимость автоматически скрывать или отключать товары, количество которых достигло нуля. Это предотвращает возможность покупки отсутствующих товаров и улучшает пользовательский опыт. Однако стандартные настройки WooCommerce не всегда обеспечивают нужную автоматизацию, что приводит к ошибкам и ручному управлению.

Как проверить, что товар отображается некорректно при отсутствии наличия

  • Перейдите на страницу товара с количеством 0 в админке (WooCommerce > Товары).
  • Проверьте, отображается ли товар на витрине сайта.
  • Если товар продаётся или доступен к просмотру, несмотря на отсутствие наличия, значит автоматическое отключение не работает.

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

Для реализации автоматического выключения товаров при нулевом количестве воспользуемся хуком woocommerce_product_set_stock, который вызывается при обновлении количества товара.

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

add_action('woocommerce_product_set_stock', 'auto_disable_out_of_stock_products', 10, 1);
function auto_disable_out_of_stock_products($product) {
    if (!$product instanceof WC_Product) {
        return;
    }

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

    if ($stock_quantity !== null && $stock_quantity <= 0 && $status !== 'draft') {
        // Отключаем товар
        $product->set_status('draft');
        $product->save();
    } elseif ($stock_quantity > 0 && $status === 'draft') {
        // Восстанавливаем товар
        $product->set_status('publish');
        $product->save();
    }
}

Этот код автоматически переводит товар в статус "Черновик" при отсутствии запасов и возвращает в "Опубликован" при появлении товара в наличии.

Настройка WooCommerce для работы с запасами

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

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

Для проверки корректной работы решения проделайте следующие шаги:

  1. В админке измените количество товара на 0 и сохраните.
  2. Перейдите на страницу списка товаров — товар должен исчезнуть, так как он переведён в статус "Черновик".
  3. Увеличьте количество товара до положительного значения и сохраните.
  4. Проверьте, что товар снова отображается на витрине и доступен для покупки.

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

  • Товар не скрывается при 0 запасов: Проверьте, что в WooCommerce включено управление запасами и код действительно выполняется (проверьте логи или добавьте временный error_log()).
  • Изменение статуса не сохраняется: Убедитесь, что объект $product является экземпляром WC_Product, а также что нет конфликтов с другими плагинами, блокирующими сохранение.
  • Восстановление товара не происходит: Проверьте, что статус товара действительно устанавливается в "draft", иначе условие восстановления не сработает.
  • Проблемы с кэшированием: При использовании кэш-плагинов очистите кэш после изменений для корректного отображения.

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

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

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

МетодОписаниеПлюсыМинусы
Использование стандартных настроек WooCommerceОтключение отображения товаров без запасов через настройкиПростота настройки, не требует кодаНе всегда скрывает товар полностью, нет автоматики изменения статуса
Код с автоматическим изменением статуса (предложенный)Автоматическое переключение статуса товара при изменении запасовПолный контроль над отображением, гибкостьТребует базовых знаний PHP и тестирования
Плагины сторонних разработчиковГотовые решения для управления товарами и запасамиДополнительный функционал, поддержкаМожет влиять на производительность, возможны конфликты
Как удалить неиспользуемые плагины в WordPress: практические советы
27.11.2025
Как создать динамический текст в Elementor с помощью шорткода в WordPress
15.02.2026
Оптимизация WordPress для быстрого загрузки сайтов
18.11.2025
Как добавить нестандартные элементы в Elementor с помощью кода
28.12.2025
WooCommerce: как разрешить покупателям самостоятельно изменять количество товара в корзине
15.05.2026