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 (например, исключение страниц) Ускорение сайта, корректная работа корзины Не решает проблему удаления товаров, только предотвращает кэширование
Как использовать фильтр YITH WooCommerce Wishlist для добавления собственных критериев
16.01.2026
Как удалить неактивных пользователей WordPress
28.02.2026
Как удалить неиспользуемые термины таксономий в WordPress
17.04.2026
Удалить кэш в WordPress: практические способы и код для очистки
10.11.2025
Автоматическое удаление старых записей в WordPress через Cron
07.03.2026