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

Почему важно автоматически отключать отсутствующие варианты товаров

В WooCommerce у товаров могут быть варианты (вариации), например, разные размеры или цвета. Если вариант временно отсутствует на складе, но его статус не обновлен, покупатели могут попытаться заказать его, что приведет к недовольству и увеличению возвратов. Автоматическое отключение отсутствующих вариантов помогает избежать таких ситуаций и улучшить опыт пользователей.

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

Основные признаки проблемы:

  • Варианты с нулевым остатком остаются активными и доступны для покупки;
  • Заказы с отсутствующими вариантами, которые нельзя выполнить;
  • В админке WooCommerce нет визуального разделения между доступными и недоступными вариантами;
  • Пользователи жалуются на невозможность получить товар после оформления заказа.

Для проверки можно открыть товар с вариантами и посмотреть наличие каждого варианта. Если вариант с остатком 0 или меньше всё еще доступен для заказа — значит, автоматического отключения нет.

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

1. Проверка настроек WooCommerce

В WooCommerce есть настройка, отключающая покупку товаров без остатков. Убедитесь, что она включена:

  • Перейдите в WooCommerce → Настройки → Товары → Управление запасами;
  • Включите «Включить управление запасами»;
  • Убедитесь, что опция «Разрешить покупку при отсутствии товара» отключена.

2. Добавление кода для автоматического отключения вариантов

Если по каким-то причинам WooCommerce не отключает варианты с нулевым остатком, можно заставить это сделать программно. Добавьте следующий код в файл functions.php вашей темы или в кастомный плагин:

add_action('woocommerce_product_set_stock', 'auto_disable_variation_if_out_of_stock', 10, 1);

function auto_disable_variation_if_out_of_stock($product) {
    if ($product->get_type() !== 'variation') {
        return;
    }
    $stock_quantity = $product->get_stock_quantity();
    if ($stock_quantity <= 0) {
        $product->set_status('private'); // или 'draft' для скрытия варианта
        $product->save();
    } else {
        if ($product->get_status() !== 'publish') {
            $product->set_status('publish');
            $product->save();
        }
    }
}

Этот код отслеживает обновления остатков вариаций и автоматически меняет их статус на private (сделать недоступным) при отсутствии на складе, и возвращает статус publish, когда товар снова появляется.

3. Запуск массовой проверки всех вариантов

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

function bulk_disable_out_of_stock_variations() {
    $args = [
        'post_type' => 'product_variation',
        'posts_per_page' => -1,
        'post_status' => ['publish', 'private', 'draft'],
    ];
    $variations = get_posts($args);

    foreach ($variations as $variation_post) {
        $variation = wc_get_product($variation_post->ID);
        if (!$variation) continue;
        $stock_qty = $variation->get_stock_quantity();
        if ($stock_qty <= 0 && $variation->get_status() === 'publish') {
            $variation->set_status('private');
            $variation->save();
        } elseif ($stock_qty > 0 && $variation->get_status() !== 'publish') {
            $variation->set_status('publish');
            $variation->save();
        }
    }
}
// Вызовите функцию один раз, затем удалите вызов
bulk_disable_out_of_stock_variations();

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

  • В админке WooCommerce откройте товар с вариантами — отсутствующие варианты должны иметь статус private или draft и не отображаться покупателям.
  • Попробуйте оформить заказ с отсутствующим вариантом — система должна блокировать такой вариант.
  • Проверьте, что при обновлении остатков на положительное значение, вариант автоматически становится доступен.

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

  • Код не работает после обновления остатков: Убедитесь, что в WooCommerce включено управление запасами и обновления остатков происходит через стандартные функции WooCommerce. Если вы обновляете остатки напрямую в базе, хуки woocommerce_product_set_stock не срабатывают.
  • Варианты остаются видимыми для покупателей: Статус private скрывает вариант, но иногда темы или плагины могут показывать такие варианты. Используйте статус draft или кастомные фильтры для исключения их из каталога.
  • Негативное влияние на SEO: Удаление или скрытие вариантов может повлиять на индексацию. Для SEO лучше использовать статус private, чтобы вариант не индексировался.
  • Массовая проверка вызывает нагрузку: Запускайте массовую проверку в период низкой нагрузки или через WP-CLI.

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

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

Сравнение вариантов решения

Метод Преимущества Недостатки Пример использования
Стандартные настройки WooCommerce Простая реализация, не требует кода Не всегда надежно отключает варианты Включить "Управление запасами" и отключить покупки при отсутствии
Кодовое отключение вариаций по статусу Гибко, работает с любыми обновлениями остатков Требует поддержки и тестирования Хук woocommerce_product_set_stock с функцией смены статуса вариации
Массовая проверка через скрипт Обновляет все варианты в базе, полезно после импорта Высокая нагрузка при большом количестве товаров Функция bulk_disable_out_of_stock_variations()
Как создать многоуровневую навигацию в WordPress с помощью кода
23.01.2026
Как удалить старые изображения в WordPress без плагинов
22.03.2026
Автоматическое обновление плагинов и тем в WordPress без риска
28.12.2025
Как автоматизировать удаление старого контента в WordPress
12.02.2026
WooCommerce: как автоматически удалять отменённые заказы и товары из них
07.05.2026

Обучение разработке на WordPress, как создавать темы, плагины. Подробнее об обучении.