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

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

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

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

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

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

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

1. Добавление фильтра для проверки запасов в корзине

add_action('woocommerce_check_cart_items', 'remove_zero_stock_items_from_cart');
function remove_zero_stock_items_from_cart() {
    $cart = WC()->cart->get_cart();
    $removed = false;
    foreach ($cart as $cart_item_key => $cart_item) {
        $product = $cart_item['data'];
        // Проверяем, управляет ли товар запасом и есть ли запас
        if ($product->managing_stock() && $product->get_stock_quantity() <= 0) {
            WC()->cart->remove_cart_item($cart_item_key);
            $removed = true;
        }
    }
    if ($removed) {
        wc_add_notice(__('Из корзины удалены товары, которых нет в наличии.'), 'error');
    }
}

2. Отображение уведомления пользователю

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

3. Кэширование и Ajax

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

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

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

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

  • Кэширование страниц корзины и оформления заказа. Решение: отключить кэширование для этих страниц или использовать исключения в плагинах кэширования.
  • Код не срабатывает для вариаций товаров. Убедитесь, что проверяется запас именно вариации, а не родительского товара. В WooCommerce у вариаций отдельные объекты продуктов.
  • При обновлениях WooCommerce код перестал работать. Проверьте, что используемые методы managing_stock() и get_stock_quantity() актуальны для вашей версии WooCommerce.

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

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

Сравнение вариантов решения

МетодПреимуществаНедостатки
Код в functions.php (как в статье) Быстрое решение, не требует плагинов, легко кастомизируется Нужно поддерживать самостоятельно, возможна несовместимость с обновлениями
Плагин управления запасами Простота настройки, поддержка, дополнительные функции Дополнительная нагрузка на сайт, возможны конфликты с другими плагинами
Обработка на уровне кэша/CDN (например, исключение страниц) Ускорение сайта, корректная работа корзины Не решает проблему удаления товаров, только предотвращает кэширование
Как удалить неиспользуемые термины таксономий в WordPress
17.04.2026
Как создать динамические виджеты в WordPress с помощью REST API
03.04.2026
Добавить уникальные поля в формы регистрации WordPress с подтверждением
21.02.2026
Как создать автоматическое удаление старого контента в WordPress
23.12.2025
Добавление поля телефона с подтверждением в форму регистрации WordPress
12.02.2026