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

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

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

Как понять, что лимит необходим?

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

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

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

Ниже пример кода, который ограничит количество товара с ID 123 максимум до 5 штук в корзине:

add_filter('woocommerce_add_to_cart_validation', 'limit_product_quantity_in_cart', 10, 3); 
function limit_product_quantity_in_cart($passed, $product_id, $quantity) {
    $limit = 5; // Максимальное количество
    $target_product_id = 123; // ID товара для ограничения

    if ($product_id == $target_product_id) {
        $cart = WC()->cart->get_cart();
        $current_quantity = 0;

        foreach ($cart as $cart_item_key => $cart_item) {
            if ($cart_item['product_id'] == $product_id) {
                $current_quantity += $cart_item['quantity'];
            }
        }

        if (($current_quantity + $quantity) > $limit) {
            wc_add_notice(sprintf('Вы не можете добавить более %d единиц этого товара в корзину.', $limit), 'error');
            return false;
        }
    }
    return $passed;
}

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

Расширение: лимит для нескольких товаров с разными значениями

Если нужно задать лимит для нескольких товаров, используйте массив и проверяйте наличие в нём ID товара:

add_filter('woocommerce_add_to_cart_validation', 'limit_multiple_products_quantity', 10, 3);
function limit_multiple_products_quantity($passed, $product_id, $quantity) {
    $limits = [
        123 => 5, // для товара ID 123 максимум 5
        456 => 2, // для товара ID 456 максимум 2
    ];

    if (array_key_exists($product_id, $limits)) {
        $limit = $limits[$product_id];
        $cart = WC()->cart->get_cart();
        $current_quantity = 0;

        foreach ($cart as $cart_item) {
            if ($cart_item['product_id'] == $product_id) {
                $current_quantity += $cart_item['quantity'];
            }
        }

        if (($current_quantity + $quantity) > $limit) {
            wc_add_notice(sprintf('Вы не можете добавить более %d единиц этого товара в корзину.', $limit), 'error');
            return false;
        }
    }
    return $passed;
}

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

Чтобы убедиться, что ограничение работает:

  1. Очистите корзину.
  2. Попробуйте добавить товар с ID 123 в количестве, превышающем лимит (например, 6 штук). Должно появиться сообщение об ошибке, и товар не добавится.
  3. Добавьте сначала 3 штуки, затем попытайтесь добавить ещё 3. При попытке добавить больше 2-3 появится ошибка.
  4. Проверьте, что для других товаров ограничений нет.

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

  • Ошибка: Сообщение об ошибке не отображается или товар добавляется сверх лимита.
    Причина: Код не подключён корректно, либо конфликт с другими плагинами.
    Решение: Проверьте добавление хука, отключите плагины, которые могут влиять на корзину, проверьте логи ошибок PHP.
  • Ошибка: Лимит не срабатывает при обновлении количества в корзине.
    Причина: Хук проверяет только добавление, но не обновление.
    Решение: Дополнительно используйте хук woocommerce_update_cart_validation для проверки лимитов при обновлении.
  • Ошибка: Ограничение работает, но пользователь не понимает причину.
    Решение: Сделайте сообщение об ошибке максимально понятным, используйте wc_add_notice с типом 'error'.

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

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

Сравнение способов установки лимита на количество товара

МетодПреимуществаНедостатки
Код в functions.php (как в статье)Легко кастомизировать, быстро работает, минимально нагружает сайтТребует навыков разработки, не всегда очевиден для владельца сайта
Плагины WooCommerce Limit QuantityПростой интерфейс, настройки без кодаМожет конфликтовать с другими плагинами, нагрузка на сайт, платные функции
Кастомизация шаблонов и JavaScriptУлучшение UX, предупреждение пользователя заранееМожно обойти, нужно серверное дублирование проверки
Как автоматизировать управление пользовательскими ролями в WordPress: практические решения
15.03.2026
Как автоматизировать обновление плагинов и тем в WordPress с помощью кода
16.01.2026
WooCommerce: как автоматически отключать возможность оформления заказа при отсутствии товара на складе
17.06.2026
Как создать автоматический импорт продуктов в WooCommerce с использованием REST API
10.02.2026
WooCommerce: как автоматически изменять цены товаров при скидках через код
22.04.2026