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

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

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

  • Отсутствие проверки наличия товара при загрузке корзины.
  • Некорректная настройка управления запасами.
  • Кэширование корзины без обновления данных о наличии.

Первый шаг – проверить, не отображаются ли в корзине товары с нулевым запасом. Для этого откройте страницу корзины и визуально проверьте наличие таких позиций. Чтобы получить список товаров с нулевым или отрицательным запасом в корзине, можно использовать следующий код для отладки (например, добавить в functions.php или в плагин):

add_action('woocommerce_before_cart', function() {
    foreach (WC()->cart->get_cart() as $cart_item_key => $cart_item) {
        $product = $cart_item['data'];
        if (!$product->is_in_stock()) {
            error_log('Товар в корзине отсутствует на складе: ' . $product->get_name());
        }
    }
});

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

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

add_action('woocommerce_check_cart_items', function() {
    $cart = WC()->cart;
    $removed_products = [];
    foreach ($cart->get_cart() as $cart_item_key => $cart_item) {
        $product = $cart_item['data'];
        if (!$product->is_in_stock()) {
            $removed_products[] = $product->get_name();
            $cart->remove_cart_item($cart_item_key);
        }
    }
    if (!empty($removed_products)) {
        wc_add_notice('Следующие товары были удалены из корзины, так как отсутствуют на складе: ' . implode(', ', $removed_products), 'error');
    }
});

Разъяснение кода:

  • Цикл перебирает все товары в корзине.
  • Метод is_in_stock() проверяет наличие товара.
  • Если товар отсутствует, он удаляется из корзины через remove_cart_item().
  • Пользователь получает уведомление об удалении.

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

Чтобы убедиться, что код работает корректно:

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

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

  • Товар не удаляется из корзины: Убедитесь, что код добавлен в активную тему или плагин, и что корзина инициализирована (WC()->cart не null).
  • Ошибка «Call to a member function is_in_stock() on null»: Проверьте, что $cart_item['data'] — это объект WC_Product. Иногда корзина содержит невалидные данные или кастомные товары.
  • Уведомления не отображаются: Проверьте, что тема выводит сообщения WooCommerce с помощью wc_print_notices() или аналогичных функций.

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

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

Сравнение решений: код vs плагины для удаления отсутствующих товаров из корзины

РешениеПлюсыМинусыКогда использовать
Код (как в статье)Полный контроль, бесплатно, гибкоТребует навыков PHP, поддержка и доработка на владельце сайтаДля разработчиков и кастомных проектов
Плагины (например, WooCommerce Stock Manager или специализированные)Простота установки, готовый функционал, поддержкаМожет влиять на производительность, ограничена кастомизацияДля владельцев без навыков программирования
Как создать настройки плагина WordPress с примерами кода
16.02.2026
WooCommerce: диагностика и решение проблем с автоматическим обновлением корзины
19.06.2026
Как использовать фильтры WordPress для изменения заголовков страниц
22.04.2026
WooCommerce: автоматическое удаление товаров из корзины при отсутствии на складе
26.06.2026
WooCommerce не отображает варианты товаров: практическое руководство
06.05.2026