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

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

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

Как проверить текущее поведение корзины

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

Для проверки добавьте в функцию темы или плагина следующий код, чтобы вывести количество товаров в корзине:

add_action('woocommerce_before_cart', function() {
    echo '<p>Товаров в корзине: ' . WC()->cart->get_cart_contents_count() . '</p>';
});

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

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

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

add_action('woocommerce_check_cart_items', function() {
    $max_items = 10; // Максимальное количество товаров
    $cart_count = WC()->cart->get_cart_contents_count();
    if ($cart_count > $max_items) {
        wc_add_notice(sprintf('В корзине не может быть больше %d товаров.', $max_items), 'error');
        // Отключаем оформление заказа
        remove_action('woocommerce_proceed_to_checkout', 'woocommerce_button_proceed_to_checkout', 20);
    }
});

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

Если нужно ограничить количество каждого товара индивидуально, добавьте следующий фильтр:

add_filter('woocommerce_add_to_cart_validation', function($passed, $product_id, $quantity) {
    $max_per_product = 3; // Максимум 3 штуки одного товара
    $current_quantity = 0;
    foreach(WC()->cart->get_cart() as $cart_item) {
        if ($cart_item['product_id'] === $product_id) {
            $current_quantity += $cart_item['quantity'];
        }
    }
    if (($current_quantity + $quantity) > $max_per_product) {
        wc_add_notice(sprintf('Вы не можете добавить больше %d единиц этого товара.', $max_per_product), 'error');
        return false;
    }
    return $passed;
}, 10, 3);

3. Ограничение по сумме товаров определенного типа

Иногда нужно ограничить количество товаров определенной категории. Пример кода:

add_action('woocommerce_check_cart_items', function() {
    $max_category_quantity = 5;
    $category_slug = 'limited'; // Слаг категории
    $category_count = 0;
    foreach (WC()->cart->get_cart() as $cart_item) {
        if (has_term($category_slug, 'product_cat', $cart_item['product_id'])) {
            $category_count += $cart_item['quantity'];
        }
    }
    if ($category_count > $max_category_quantity) {
        wc_add_notice(sprintf('Максимум %d товаров категории "%s" разрешено в корзине.', $max_category_quantity, $category_slug), 'error');
        remove_action('woocommerce_proceed_to_checkout', 'woocommerce_button_proceed_to_checkout', 20);
    }
});

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

  • Добавьте товары в корзину и проверьте, что при превышении заданных лимитов появляется сообщение об ошибке.
  • Убедитесь, что кнопка оформления заказа скрывается или становится неактивной при превышении лимита.
  • Попытайтесь добавить больше товаров через разные способы (страница товара, быстрая корзина).

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

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

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

  • Старайтесь минимизировать логику в хуках, вызываемых на каждой загрузке корзины, чтобы не тормозить сайт.
  • Для сложных правил ограничений используйте transient-кэширование результатов подсчетов.
  • Проверяйте наличие nonce и безопасность при обработке AJAX-запросов, если расширяете функционал ограничений.
  • Храните настройки ограничений в options с правильной валидацией и санитацией.

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

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

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

⭐⭐⭐⭐⭐
WooCommerce: как установить ограничение на количество товаров в корзине
20.04.2026
Как добавить и сохранить кастомное поле пользователя при регистрации в WordPress
26.02.2026
Как отключить или ограничить AJAX-запросы в WordPress для повышения производительности
24.01.2026
Как создать обновляемую карту сайта XML в WordPress с поддержкой фильтрации
27.01.2026
Как создать автоматический sitemap с поддержкой фильтров в WordPress
05.04.2026
×
WordPress
прокачай свой сайт!

-20% на премиум темы и плагины

Сделай апгрейд сайта ⋙