wp-kurs.ru wordpress WP-Kurs

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

Диагностика задачи: зачем ограничивать количество товаров в корзине WooCommerce

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

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

1. Добавление проверки при добавлении товара в корзину

Для ограничения количества товаров в корзине нужно использовать хук woocommerce_add_to_cart_validation. Он позволяет проверить состояние корзины перед добавлением нового товара и отменить добавление с сообщением об ошибке.

add_filter('woocommerce_add_to_cart_validation', 'limit_cart_items_quantity', 10, 3);
function limit_cart_items_quantity($passed, $product_id, $quantity) {
    $max_items = 5; // максимальное количество товаров в корзине

    // Получаем текущее количество товаров в корзине
    $current_qty = WC()->cart->get_cart_contents_count();

    // Проверяем, если после добавления превысится лимит
    if ($current_qty + $quantity > $max_items) {
        wc_add_notice( sprintf('Вы можете добавить не более %d товаров в корзину.', $max_items), 'error' );
        return false; // блокируем добавление
    }
    return $passed;
}

2. Вывод информативного сообщения на странице корзины

Чтобы пользователь понимал лимит, полезно вывести предупреждение на странице корзины. Для этого добавим сообщение с помощью хука woocommerce_before_cart.

add_action('woocommerce_before_cart', 'show_cart_limit_notice');
function show_cart_limit_notice() {
    $max_items = 5;
    echo '<div class="woocommerce-info">Максимальное количество товаров в корзине: ' . $max_items . '</div>';
}

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

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

Проверьте работу на разных товарах и с разным количеством, чтобы убедиться в стабильности.

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

  • Ошибка: лимит не срабатывает при обновлении количества в корзине.
    Решение: данный код ограничивает добавление товара, но не обновление количества через страницу корзины. Для этого нужно добавить проверку в обработчик обновления корзины (см. следующий блок).
  • Ошибка: уведомление появляется, но товар все равно добавляется.
    Причина — неверное использование фильтра или конфликт с другими плагинами. Проверьте приоритет и отсутствие ошибок PHP.
  • Ошибка: лимит срабатывает неправильно при вариативных товарах.
    Проверьте, что учитывается общее количество товаров, а не только уникальных позиций.

Расширение: ограничение при обновлении количества в корзине

Чтобы полностью контролировать лимит, нужно также ограничить возможность увеличения количества товара на странице корзины. Для этого используем хук woocommerce_update_cart_validation:

add_filter('woocommerce_update_cart_validation', 'limit_cart_update_quantity', 10, 4);
function limit_cart_update_quantity($passed, $cart_item_key, $values, $quantity) {
    $max_items = 5;

    // Получаем корзину
    $cart = WC()->cart->get_cart();

    // Считаем общее количество за исключением обновляемого товара
    $total_qty = 0;
    foreach ($cart as $key => $item) {
        if ($key !== $cart_item_key) {
            $total_qty += $item['quantity'];
        }
    }

    // Проверяем, не превысит ли новая сумма лимит
    if (($total_qty + $quantity) > $max_items) {
        wc_add_notice( sprintf('Общее количество товаров в корзине не может превышать %d.', $max_items), 'error' );
        return false;
    }
    return $passed;
}

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

  • Все добавленные функции должны быть размещены в файле functions.php дочерней темы или в отдельном плагине, чтобы избежать потери изменений при обновлении темы.
  • Минимизируйте запросы к базе, используйте функции WooCommerce для работы с корзиной, как показано выше.
  • Проверяйте совместимость с кеширующими плагинами — иногда кеширование мешает обновлению корзины.
  • Для более гибкой настройки лимитов можно добавить настройки в админку через Customizer или отдельный плагин.

Сравнение вариантов реализации ограничения количества товаров в корзине

МетодПлюсыМинусы
Использование хука woocommerce_add_to_cart_validationПростая реализация, работает сразу при добавленииНе учитывает обновление количества в корзине
Расширение на woocommerce_update_cart_validationПолный контроль над количеством при изменении в корзинеТребует дополнительного кода и тестирования
Плагин с ограничением корзиныГотовое решение с настройкамиМожет быть избыточным и влиять на производительность
×
WPShop
партнерка без «но»!

До 3225₽ за каждую продажу

Подключиться к игре