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)Простая установка, интерфейс настройки, поддержка разработчикаМожет замедлять сайт, ограниченная кастомизация, возможны конфликты с другими плагинами

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

⭐⭐⭐⭐⭐
WooCommerce: как автоматически удалять товар из корзины при обновлении количества
11.06.2026
Как удалить или изменить название автора в WordPress без плагинов
16.01.2026
Как настроить отложенный запуск функций в WordPress с помощью Cron
21.02.2026
Как автоматизировать удаление старых чрезмерных изображений в WordPress
07.03.2026
WooCommerce: как запретить изменение количества товаров в корзине
16.05.2026
×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее