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

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

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

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

  • Клиенты могут добавить товар, который отсутствует на складе;
  • При переходе к оформлению заказа появляется ошибка «нет в наличии», но товар остаётся в корзине;
  • Отсутствует автоматическая синхронизация статуса товара и содержимого корзины.

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

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

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

add_action('woocommerce_check_cart_items', 'wpin_remove_out_of_stock_from_cart');
function wpin_remove_out_of_stock_from_cart() {
    foreach (WC()->cart->get_cart() as $cart_item_key => $cart_item) {
        $product = $cart_item['data'];
        if (!$product->is_in_stock()) {
            WC()->cart->remove_cart_item($cart_item_key);
            wc_add_notice(sprintf('Товар «%s» был удалён из корзины, так как отсутствует на складе.', $product->get_name()), 'notice');
        }
    }
}

2. Обработка AJAX-обновления корзины

Чтобы функция срабатывала и при AJAX-обновлении корзины (например, изменение количества), добавим аналогичный вызов:

add_action('woocommerce_before_calculate_totals', 'wpin_remove_out_of_stock_from_cart');

3. Кэш и кеширующие плагины

Убедитесь, что корзина не кешируется сервером или плагинами кеширования, иначе изменения не будут видны сразу.

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

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

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

  • Отсутствие уведомлений клиенту: если вы не видите сообщения об удалении, проверьте, не отключены ли уведомления WooCommerce или тема их не выводит.
  • Товары не удаляются при AJAX-обновлении: проверьте, что хук woocommerce_before_calculate_totals подключён и функция не вызывает ошибок.
  • Кеширование корзины: кеширующие плагины (например, WP Super Cache, W3 Total Cache) могут препятствовать обновлению корзины. Настройте исключения для страниц корзины и оформления заказа.
  • Проблемы с вариативными товарами: убедитесь, что проверка is_in_stock() работает корректно для вариаций, иногда нужно дополнительно проверять наличие атрибутов.

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

  • Добавляйте код только в дочернюю тему или в кастомный плагин, чтобы не потерять изменения при обновлении.
  • Минимизируйте количество операций в цикле по корзине, чтобы не замедлять загрузку страниц.
  • Регулярно тестируйте корзину после обновления WooCommerce — API и поведение функций может меняться.
  • Для сайтов с большим трафиком рассмотрите кэширование на уровне объектов, но исключайте корзину из общего кеша.

Сравнение способов решения задачи

МетодПлюсыМинусыКогда использовать
Код в functions.php / плагинеПолный контроль, без сторонних зависимостейТребует навыков, риск ошибок при обновленияхДля разработчиков, кастомных решений
Плагины для управления запасамиПростая настройка, готовые функцииМогут грузить сайт, не всегда гибкиеДля пользователей без навыков программирования
Комбинация кода и плагиновБаланс контроля и удобстваМожет усложнить поддержкуДля средних проектов с частыми изменениями
Как создать автоматический sitemap в WordPress с помощью кода
03.04.2026
Как создать настройки плагина WordPress с хранением данных в options
31.03.2026
WooCommerce: отключение автоматического обновления корзины при изменении вариантов товара
09.06.2026
Как установить ограничение на размер загружаемых файлов в WordPress
17.02.2026
WooCommerce: как установить ограничение на количество товаров в корзине
21.07.2026