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

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

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

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

1. Установка ограничения на общее число товаров в корзине

Для ограничения общего количества товаров (например, максимум 10 штук в корзине) добавим следующий код в файл functions.php активной темы или в отдельный плагин:

add_filter('woocommerce_add_to_cart_validation', 'limit_cart_items_count', 10, 3); 
function limit_cart_items_count($passed, $product_id, $quantity) {
    $max_items = 10; // максимальное количество товаров в корзине
    $current_count = WC()->cart->get_cart_contents_count();
    if ($current_count + $quantity > $max_items) {
        wc_add_notice(sprintf('Вы можете добавить не более %d товаров в корзину.', $max_items), 'error');
        return false;
    }
    return $passed;
}

2. Ограничение количества одного товара в корзине

Если нужно ограничить максимальное число одного конкретного товара (например, не более 3 штук одного товара), используйте такой код:

add_filter('woocommerce_add_to_cart_validation', 'limit_single_product_quantity', 10, 3);
function limit_single_product_quantity($passed, $product_id, $quantity) {
    $max_per_product = 3;
    $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'];
            break;
        }
    }
    if ($current_quantity + $quantity > $max_per_product) {
        wc_add_notice(sprintf('Вы можете добавить не более %d единиц этого товара.', $max_per_product), 'error');
        return false;
    }
    return $passed;
}

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

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

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

  • Ошибка: Ограничение не работает, товар добавляется сверх лимита.
    Причина: Возможно, код добавлен в неподходящее место или кеш страницы мешает обновлениям.
    Исправление: Очистите кеш, убедитесь, что код загружается (проверьте через error_log или var_dump), и что не конфликтует с другими плагинами.
  • Ошибка: Сообщение об ошибке появляется, но товар все равно добавляется.
    Причина: Фильтр woocommerce_add_to_cart_validation должен возвращать false в случае ошибки.
    Исправление: Проверьте, что ваша функция возвращает false при превышении лимита.
  • Ошибка: Ограничение срабатывает только при добавлении товара, но не при обновлении количества в корзине.
    Причина: Фильтр не ловит обновление корзины.
    Исправление: Нужно добавить проверку и на событие обновления корзины через woocommerce_update_cart_validation или использовать JavaScript для контроля.

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

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

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

МетодПреимуществаНедостатки
Код в functions.phpБыстрая реализация, полный контроль, нет лишних плагиновЗависимость от темы, сложнее поддерживать при смене темы
Отдельный плагинЛучше поддержка, переносимость, можно отключить без потери темыТребует создания и поддержки плагина
Плагин из репозитория WooCommerceГотовое решение, поддержка разработчиковМожет быть избыточным или конфликтовать с другими плагинами
Как удалить все посты из категории в WordPress: практическое руководство
17.11.2025
Как избежать замедлений WordPress при большом количестве записей
11.02.2026
Как создать автоматический список постов с уникальным порядком в WordPress
04.03.2026
Как автоматизировать очистку базы данных WordPress от мусорных записей
10.12.2025
Как отключить AJAX в WooCommerce для ускорения сайта
01.06.2026