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

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

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

Проверить проблему можно так:

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

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

Реализуем решение через хук WooCommerce woocommerce_before_calculate_totals, который вызывается перед пересчетом стоимости корзины. При обнаружении товара с количеством 0 — удаляем его из корзины.

Пример кода для functions.php вашей темы или в плагине:

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

    foreach ( $cart->get_cart() as $cart_item_key => $cart_item ) {
        if ( isset($cart_item['quantity']) && $cart_item['quantity'] == 0 ) {
            $cart->remove_cart_item( $cart_item_key );
        }
    }
}

Этот код перебирает все позиции корзины, и если количество товара равно 0, удаляет его.

Дополнительно: Обработка AJAX обновления корзины

Если в теме или плагинах используется AJAX для обновления корзины, убедитесь, что данный хук срабатывает и в AJAX-запросах, иначе товар не удалится сразу.

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

  • Добавьте несколько товаров в корзину.
  • Перейдите на страницу корзины.
  • Измените количество любого товара на 0 и нажмите обновить корзину.
  • Товар с количеством 0 должен исчезнуть из списка автоматически.
  • При повторном обновлении корзины количество и состав товаров должны оставаться корректными.

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

  • Код не срабатывает при AJAX обновлении корзины: Проверьте, что в вашем шаблоне или плагинах вызов обновления корзины действительно использует стандартные хуки WooCommerce. В редких случаях может потребоваться дополнительная настройка AJAX-обработчиков.
  • Удаление товара не происходит при обновлении количества: Возможно, в коде темы или сторонних плагинах есть фильтры, которые мешают удалению. Временно отключите плагины и переключитесь на стандартную тему для теста.
  • Удаление происходит, но количество товара не обновляется правильно: Убедитесь, что в форме корзины поле количества имеет правильный name и значение передается корректно.

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

  • Добавляйте код удаления товаров с количеством 0 в функции, которые проверяют контекст (админка, AJAX), чтобы не влиять на другие операции.
  • Не используйте тяжелые циклы или лишние запросы к базе данных — код выше работает напрямую с объектом корзины.
  • Регулярно тестируйте обновления WooCommerce и темы, чтобы убедиться, что ваш код совместим с последними версиями.

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

СпособОписаниеПлюсыМинусы
Код на хуке woocommerce_before_calculate_totals Автоматическое удаление товаров с количеством 0 при пересчёте корзины Легко внедряется, не требует плагинов, быстро работает Требует проверки совместимости с AJAX и кастомными темами
Использование плагинов управления корзиной Плагины с расширенными функциями управления корзиной Больше возможностей, настройки без кода Зависимость от стороннего кода, может замедлять сайт
Кастомный JavaScript для удаления товара на клиенте Удаление товаров с 0 количеством без перезагрузки страницы Улучшает UX, мгновенный отклик Может конфликтовать с серверной логикой, требует поддержки

Скачать WP с оф. сайта Магазин проверенных платных тем