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

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

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

Чтобы проверить, есть ли у вас такая проблема, перейдите в корзину и вручную установите количество товара в 0, затем обновите корзину. Если товар не исчезает, значит WooCommerce не обрабатывает это событие автоматически.

Почему это важно исправить

  • Пользовательский опыт: корзина с товарами и количеством 0 — нелогично и сбивает с толку.
  • Влияние на расчеты: потенциальные ошибки при подсчете итоговой суммы.
  • Чистота данных: корзина должна отражать актуальное состояние выбора пользователя.

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

Для автоматического удаления товара из корзины при изменении количества на 0 добавим кастомный обработчик на событие обновления корзины с помощью хука woocommerce_after_cart_item_quantity_update.

add_action('woocommerce_after_cart_item_quantity_update', 'remove_product_if_quantity_zero', 10, 4);
function remove_product_if_quantity_zero($cart_item_key, $quantity, $old_quantity, $cart) {
    if ($quantity == 0) {
        $cart->remove_cart_item($cart_item_key);
        wc_add_notice(__('Товар удалён из корзины, так как количество равно 0.'), 'notice');
    }
}

Этот код нужно добавить в файл functions.php вашей активной темы или в кастомный плагин.

Объяснение кода

  • $cart_item_key — уникальный ключ товара в корзине.
  • $quantity — новое значение количества после обновления.
  • Если $quantity равен 0, вызываем метод remove_cart_item для удаления товара.

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

  1. Откройте страницу корзины WooCommerce.
  2. Измените количество одного из товаров на 0.
  3. Нажмите кнопку обновления корзины.
  4. Проверьте, что товар исчез из списка.
  5. Убедитесь, что на странице появился уведомительный текст "Товар удалён из корзины, так как количество равно 0.".

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

  • Код не работает, товар не удаляется: Проверьте, что вы добавили код в правильное место и что тема/плагин не переопределяют логику корзины.
  • Уведомления не показываются: Убедитесь, что в теме поддерживается вывод уведомлений WooCommerce через wc_print_notices().
  • Удаление происходит, но страница не обновляется автоматически: В стандартном WooCommerce обновление корзины требует нажатия кнопки "Обновить корзину". Для автоматизации можно добавить JavaScript для автообновления.

Практические советы по улучшению UX и производительности

  • Автоматическое обновление корзины после изменения количества: Добавьте JavaScript, который будет автоматически отправлять форму корзины при изменении количества, чтобы избежать лишних кликов пользователя.
  • Минимизируйте количество запросов: Не используйте тяжелые вычисления в хуках изменения корзины, чтобы не замедлять сайт.
  • Кэширование: Не кэшируйте страницы корзины и оформления заказа, чтобы не возникали несоответствия данных.

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

jQuery(function($) {
    $('form.woocommerce-cart-form').on('change', 'input.qty', function() {
        $(this).closest('form').find('button[name="update_cart"]').prop('disabled', false).trigger('click');
    });
});

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

МетодПлюсыМинусы
Плагин (например, WooCommerce Remove Zero Quantity Items)Быстрая установка, готовый функционал, поддержка обновленийМожет грузить лишний код, не всегда гибко настраивается
Кастомный код (как в статье)Точный контроль, минимум нагрузки, легко модифицироватьТребует навыков разработки, ответственность за поддержку

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