WooCommerce: как автоматически отключить неактивные варианты товаров

Проблема: почему нужно отключать неактивные варианты товаров в WooCommerce

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

Автоматическое отключение таких вариантов поможет упростить управление ассортиментом и улучшить UX без ручного администрирования.

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

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

  • Перейдите в админку WooCommerce → Товары → выберите переменный товар;
  • Вкладка «Вариации» → проверьте поле «Запас» (Stock quantity);
  • Если вариант с запасом 0 и статусом «В наличии», значит он активен и отображается покупателям.

Также проверьте настройки управления запасами в WooCommerce (WooCommerce → Настройки → Товары → Управление запасами). Если управление запасами отключено, скрипты не сработают.

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

Мы реализуем автоматическое отключение вариантов с нулевым остатком при сохранении товара или обновлении запасов с помощью хука woocommerce_update_product. Варианты с запасом 0 будут переводиться в статус "неактивные".

add_action('woocommerce_update_product', 'auto_disable_out_of_stock_variations', 10, 1);function auto_disable_out_of_stock_variations($product_id) {    $product = wc_get_product($product_id);    if (!$product || $product->get_type() !== 'variable') {        return;    }    $variations = $product->get_children();    foreach ($variations as $variation_id) {        $variation = wc_get_product($variation_id);        if ($variation && $variation->managing_stock()) {            $stock_qty = $variation->get_stock_quantity();            // Отключаем вариант, если запас 0 или меньше            if ($stock_qty === 0 || $stock_qty < 0) {                $variation->set_status('private'); // Скрываем вариант                $variation->save();            } else {                // Включаем обратно, если запас появился                if ($variation->get_status() === 'private') {                    $variation->set_status('publish');                    $variation->save();                }            }        }    }}

Код ставим в functions.php вашей дочерней темы или в кастомный плагин. Он проверяет каждый вариант и меняет статус, что влияет на отображение в каталоге.

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

  • Обновите остатки товаров с вариантами, где запас 0;
  • Откройте страницу товара на фронтенде и убедитесь, что варианты с нулевым запасом скрыты;
  • Если запас появился, вариант должен автоматически снова стать видимым;
  • В админке в списке вариаций статус должен меняться на "private" у неактивных вариантов.

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

  • Управление запасами отключено: скрипт не работает, если в настройках WooCommerce отключено управление запасами;
  • Кэширование: если используется агрессивное кэширование, изменения статусов могут не сразу отображаться. Очистите кэш;
  • Неправильный статус: используйте статус private или draft для скрытия варианта, publish — для отображения. Другие статусы могут не работать;
  • Отсутствие хуков: убедитесь, что хук woocommerce_update_product вызывается при обновлении запасов или товара. Иногда нужно дополнительно триггерить обновление.

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

  • Добавьте проверку прав пользователя, если планируете использовать код в админке, чтобы избежать неожиданного изменения статусов;
  • Используйте transient или кэширование, если у вас тысячи товаров, чтобы не перегружать сервер при массовом обновлении;
  • Не запускайте код на фронтенде — только в админке или при обновлении товара;
  • Резервное копирование базы перед внедрением кода обязательно, чтобы быстро откатить в случае ошибок.

Альтернативные варианты реализации

Метод Плюсы Минусы
Плагин для управления запасами Простота установки, готовый интерфейс Может быть избыточным, нагрузка на сайт
Кастомный код (описанный выше) Легкий, точечный, без лишних функций Требует поддержки и тестирования при обновлениях WooCommerce
Скрипты для массового отключения через WP-CLI Эффективно для больших баз, быстро Требуются навыки работы с консолью, нет автоматизации
WooCommerce: как автоматически отключить варианты товаров без остатка
14.06.2026
Как создать настройку для темы WordPress в админке
07.11.2025
Как добавить AJAX фильтрацию товаров в WordPress без перезагрузки страницы
25.01.2026
WooCommerce: решение проблем с отображением вариантов товаров при фильтрации AJAX
03.07.2026
Автоочистка базы данных WordPress от несуществующих записей: эффективные методы и примеры
04.03.2026