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. Ограничение количества одного товара

Если нужно ограничить не общее количество товаров, а максимальное количество единиц каждого товара, добавим проверку по ID товара:

add_filter('woocommerce_add_to_cart_validation', 'limit_single_item_quantity', 10, 3);
function limit_single_item_quantity($passed, $product_id, $quantity) {
    $max_per_product = 3; // Максимум на один товар

    foreach (WC()->cart->get_cart() as $cart_item_key => $cart_item) {
        if ($cart_item['product_id'] === $product_id) {
            $new_quantity = $cart_item['quantity'] + $quantity;
            if ($new_quantity > $max_per_product) {
                wc_add_notice(sprintf('Максимум можно добавить %d единиц этого товара.', $max_per_product), 'error');
                return false;
            }
        }
    }
    return $passed;
}

Шаг 3. Блокировка обновления количества товаров в корзине

Также стоит ограничить изменение количества в корзине, чтобы пользователь не смог обойти ограничение через страницу корзины:

add_filter('woocommerce_update_cart_validation', 'limit_cart_update_quantity', 10, 4);
function limit_cart_update_quantity($passed, $cart_item_key, $values, $quantity) {
    $max_per_product = 3;
    if ($quantity > $max_per_product) {
        wc_add_notice(sprintf('Максимум %d единиц на товар.', $max_per_product), 'error');
        return false;
    }
    return $passed;
}

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

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

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

  • Ошибка: лимит не срабатывает при добавлении товара с вариациями. Решение: учитывайте variation_id при проверке, чтобы не допускать обхода ограничения путем добавления вариаций. В функции проверяйте $cart_item['variation_id'].
  • Ошибка: сообщение об ошибке не выводится. Проверьте, подключена ли функция wc_add_notice и корректно ли подключен хук woocommerce_add_to_cart_validation. Убедитесь, что код добавлен в functions.php темы или в собственный плагин.
  • Ошибка: ограничения не работают при AJAX добавлении в корзину. Убедитесь, что в настройках темы или плагина включена поддержка AJAX для корзины или добавьте соответствующие скрипты.

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

  • Добавляйте проверки только на серверной стороне, чтобы нельзя было обойти ограничения через клиентские скрипты.
  • Ограничения не должны влиять на производительность — используйте эффективные методы подсчета количества товаров.
  • Для крупных магазинов с большим объемом товаров и вариаций рекомендуем кэшировать результаты подсчета корзины.
  • Если используете плагин Clearfy Pro, проверьте, не конфликтует ли он с вашим кастомным кодом в части работы с корзиной.

Сравнение решений: плагин vs кастомный код

СпособПреимуществаНедостатки
Кастомный код (пример из статьи)Точный контроль, легко адаптировать, нет нагрузки доп. плагиновТребует навыков PHP, необходима поддержка при обновлениях
Плагин (например, WooCommerce Max Quantity)Простая установка, интерфейс настройки, поддержка разработчикаМожет замедлять сайт, ограниченная кастомизация, возможны конфликты с другими плагинами

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
Как удалить мета-тег генератора WordPress для повышения безопасности
02.11.2025
Оптимизация базы данных WordPress: как ускорить сайт и снизить нагрузку
17.11.2025
WooCommerce: как установить лимит на количество товаров в корзине
26.04.2026
WooCommerce: как запретить изменение количества товаров в корзине
16.05.2026
WooCommerce: как избежать конфликтов при изменении товара в корзине
29.05.2026
×
День SEO
Время сделать подарок своему WordPress!
-20% на премиум

шаблоны и плагины

Порадуй свой сайт ⋙