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

Проблема: товары в корзине WooCommerce, которых нет в наличии

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

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

Чтобы убедиться, что именно эта проблема есть на вашем сайте, выполните следующие шаги:

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

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

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

add_action('woocommerce_before_calculate_totals', 'remove_out_of_stock_items_from_cart', 10, 1);
function remove_out_of_stock_items_from_cart($cart) {
    if (is_admin() && !defined('DOING_AJAX')) {
        return;
    }

    foreach ($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" удалён из корзины, так как отсутствует на складе.', 'woocommerce'), $product->get_name()), 'error');
        }
    }
}

Этот код проверяет каждый товар в корзине перед подсчётом итогов и удаляет те, которые отсутствуют на складе. Также пользователю выводится уведомление об удалении товара.

Как проверить, что решение работает

  • Добавьте в корзину товар с нулевым или отрицательным остатком;
  • Перейдите в корзину — товар должен исчезнуть, а на странице появится сообщение об удалении;
  • Если товар доступен на складе, он остаётся в корзине.

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

  • Код не срабатывает в админке: это нормальное поведение, проверка is_admin() исключает работу в панели управления. Если хотите тестировать в админке, временно уберите проверку.
  • Товары не удаляются, если остаток больше 0, но меньше запрошенного количества: код проверяет только наличие товара на складе, а не количество. Для проверки количества используйте $product->get_stock_quantity() и сравнивайте с количеством в корзине.
  • Уведомления не отображаются: проверьте, подключена ли функция wc_print_notices() в шаблоне корзины.

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

Чтобы удалять только те товары, количество которых в корзине превышает текущий остаток, используйте расширенный код:

add_action('woocommerce_before_calculate_totals', 'remove_items_with_insufficient_stock', 10, 1);
function remove_items_with_insufficient_stock($cart) {
    if (is_admin() && !defined('DOING_AJAX')) {
        return;
    }

    foreach ($cart->get_cart() as $cart_item_key => $cart_item) {
        $product = $cart_item['data'];
        $quantity_in_cart = $cart_item['quantity'];
        $stock_quantity = $product->get_stock_quantity();

        if (!$product->is_in_stock() || $quantity_in_cart > $stock_quantity) {
            WC()->cart->remove_cart_item($cart_item_key);
            wc_add_notice(sprintf(__('Товар "%s" удалён из корзины из-за недостаточного количества на складе.', 'woocommerce'), $product->get_name()), 'error');
        }
    }
}

Чек-лист для внедрения решения

  • Проверить наличие товаров с нулевым остатком или ограниченным количеством;
  • Добавить код в functions.php или создать плагин;
  • Очистить кэш сайта и браузера;
  • Протестировать добавление товаров в корзину с разным количеством;
  • Убедиться, что уведомления о удалении отображаются;
  • Проверить совместимость с другими плагинами корзины и кеширования.

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

  • Код запускается на каждом расчёте корзины, поэтому избегайте тяжелых операций внутри цикла.
  • Обрабатывайте только публичные запросы, чтобы не влиять на работу админки.
  • Используйте локализацию сообщений через __() или _e() для поддержки мультиязычности.
  • Если у вас много товаров, рассмотрите кэширование остатков для снижения нагрузки.

Сравнение вариантов реализации

МетодПлюсыМинусы
Код в functions.phpПолный контроль, бесплатно, быстроТребует правок кода, риск ошибок
Плагин стороннийПростота установки, готовый функционалМожет быть платным, нагрузка, конфликт плагинов
Модификация шаблоновГибкость отображения сообщенийСложнее поддерживать, требует знаний PHP и WooCommerce
Как использовать хуки в WordPress правильно: практическое руководство
14.11.2025
Как отключить Emoji в WordPress: удаление и оптимизация
29.01.2026
WooCommerce: автоматическое удаление заказов по статусу и времени
04.07.2026
WooCommerce не отображает варианты товаров: практическое руководство
06.05.2026
WooCommerce: автоматическое обновление стоимости в корзине при изменении атрибутов товара
13.06.2026