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

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

Проблема с неактивными или недоступными вариантами товаров в корзине WooCommerce возникает, когда пользователь добавляет товар, но впоследствии этот вариант становится недоступным (например, его удалили, отключили или изменили атрибуты). В результате покупатель сталкивается с ошибками при оформлении заказа, либо такие позиции остаются в корзине и мешают завершить покупку.

Для диагностики:
1. Добавьте в корзину вариативный товар с несколькими вариантами.
2. Сделайте один из вариантов неактивным через админку (отключите, удалите или выставьте статус «нет в наличии»).
3. Попробуйте открыть корзину и оформить заказ.
4. Обратите внимание, есть ли ошибки или неактивные товары остаются в корзине.

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

1. Добавляем фильтр для очистки корзины при загрузке страницы

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

2. Код для удаления неактивных вариантов

add_action('woocommerce_check_cart_items', 'remove_inactive_variation_from_cart');
function remove_inactive_variation_from_cart() {
    foreach (WC()->cart->get_cart() as $cart_item_key => $cart_item) {
        $product = $cart_item['data'];
        // Проверяем, является ли товар вариацией
        if ($product->is_type('variation')) {
            // Проверяем статус вариации
            if (!$product->is_purchasable() || !$product->is_in_stock()) {
                WC()->cart->remove_cart_item($cart_item_key);
            }
        }
    }
}

3. Куда добавить код

Этот код можно добавить в файл functions.php активной темы или лучше — в кастомный плагин, чтобы не потерять изменения при обновлении темы.

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

Чтобы проверить, что решение работает:
1. Добавьте в корзину вариативный товар.
2. В админке сделайте один из вариантов недоступным (например, снимите галочку «В наличии»).
3. Обновите страницу корзины или оформите заказ.
4. Убедитесь, что неактивный вариант автоматически удалился из корзины и не мешает оформлению заказа.

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

  • Код не работает, не удаляет товар. Проверьте, что в корзине действительно есть вариации, а не простые товары; функция is_type('variation') обязательно должна применяться к объекту WC_Product.
  • Удаляются активные товары. Возможно, проверка is_purchasable() или is_in_stock() неправильно использована. Убедитесь, что не меняли логику и не добавили лишние условия.
  • Ошибка PHP или конфликт с другим плагином. Временно отключите другие плагины и проверьте, нет ли fatal ошибок. Для отладки подключите WP_DEBUG в wp-config.php.

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

  • Не используйте тяжелые циклы и запросы в хуках, которые вызываются часто. В нашем случае проверка ограничена элементами корзины и не влияет на производительность.
  • Регулярно обновляйте WooCommerce и тему, чтобы избежать несовместимостей с API.
  • Если корзина содержит много товаров, можно оптимизировать проверку, кешируя результаты или ограничивая вызовы функции.

Альтернативные варианты решения

Способ Плюсы Минусы
Код в functions.php (как выше) Быстрое решение, минимальный ресурс Требует базовых навыков PHP, может быть утерян при смене темы
Использование плагинов для очистки корзины Готовые решения, часто с настройками Могут замедлять сайт, не всегда точечное удаление неактивных вариантов
Кастомные плагины с расширенной логикой Гибкость, расширяемость Требует разработки, поддержки
Как удалить пустые meta данные в WordPress для ускорения сайта
09.04.2026
Как удалить редко используемые теги в WordPress
29.12.2025
Избавление от конфликтов в WooCommerce при кастомизации корзины
09.06.2026
Как избежать проблем с базой данных при миграции WordPress
22.01.2026
Как изменить URL товара WooCommerce без потери SEO
22.04.2026