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

Что значит «неактивный» вариант товара в WooCommerce?

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

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

Если на странице товара видны варианты без цены, с нулевым запасом или с другими проблемами, значит, они не отключены корректно. Проверьте это так:

  • В админке WooCommerce перейдите в Товары → Вариации и проверьте статусы и наличие цены у каждой вариации.
  • Проверьте фронтенд: доступны ли покупателям варианты с нулевым запасом или без цены.
  • Включите режим отладки WordPress (define('WP_DEBUG', true);) и проверьте, нет ли ошибок, связанных с вариациями.

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

Самый надежный способ — использовать хук woocommerce_variation_is_active, который управляет доступностью варианта на витрине.

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

add_filter('woocommerce_variation_is_active', 'disable_inactive_variations', 10, 2);
function disable_inactive_variations($active, $variation) {
    // Получаем ID вариации
    $variation_id = $variation->get_id();

    // Проверяем цену вариации
    $price = $variation->get_price();
    if (empty($price) || $price === '') {
        return false; // Отключить вариант без цены
    }

    // Проверяем наличие на складе
    if ($variation->managing_stock() && $variation->get_stock_quantity() <= 0) {
        return false; // Отключить вариант с нулевым запасом
    }

    // Проверяем статус публикации вариации
    if ($variation->get_status() !== 'publish') {
        return false; // Отключить непубликованные варианты
    }

    return $active;
}

Этот фильтр отключит варианты, если у них нет цены, если они не опубликованы или если на складе 0 и ведется складской учет.

Дополнительная фильтрация по кастомным метаполям

Если у вас есть собственные признаки неактивности, например, пользовательское поле _disable_variation, добавьте проверку:

$disable_flag = get_post_meta($variation_id, '_disable_variation', true);
if ($disable_flag === 'yes') {
    return false;
}

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

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

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

  • Варианты не отключаются: убедитесь, что код добавлен именно в рабочий файл (functions.php дочерней темы или плагин), и что нет конфликтов с другими плагинами, которые могут переопределять фильтр.
  • Варианты видны, но нельзя добавить в корзину: лучше отключать варианты на уровне отображения, а не только на добавление в корзину. Фильтр woocommerce_variation_is_active именно для этого.
  • Проблемы с кэшированием: если используете кэш-плагины или CDN, очистите кэш после внесения изменений.
  • Ошибки PHP: проверьте логи сервера, чтобы исключить синтаксические ошибки в коде.

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

  • Не добавляйте тяжелые запросы или циклы в фильтр woocommerce_variation_is_active, он вызывается часто.
  • Используйте внутренние методы WooCommerce для получения данных вариаций ($variation->get_price(), $variation->get_stock_quantity()), чтобы избежать прямых SQL-запросов.
  • При большом каталоге товаров рассмотрите внедрение кэширования для метаданных вариаций.

Сравнение решений для отключения неактивных вариантов

МетодПлюсыМинусы
Фильтр woocommerce_variation_is_activeПростота, надежность, не требует плагиновТребует базовых знаний PHP, нужно тестировать на конфликты
Плагины управления вариациямиГотовые решения с настройкамиМогут замедлить сайт, не всегда гибкие
Прямая модификация шаблоновПолный контроль отображенияСложно поддерживать, риск ошибок
Автообновление темы WordPress на wpbuy.ru: настройка и устранение ошибок
25.11.2025
Как создать свой шорткод в WordPress с примером кода
10.11.2025
Авто удаление спама в комментариях WordPress: лучшие практики и примеры кода
31.01.2026
Как использовать Transients API для кэширования в WordPress
08.12.2025
Как создать динамические таблицы в WordPress с помощью шорткодов
26.12.2025