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

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

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

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

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

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

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

add_action('woocommerce_check_cart_items', 'limit_cart_items_quantity');
function limit_cart_items_quantity() {
    $max_quantity = 5; // Максимальное количество товаров в корзине
    $cart_quantity = WC()->cart->get_cart_contents_count();

    if ($cart_quantity > $max_quantity) {
        wc_add_notice(sprintf('Вы можете добавить не более %d товаров в корзину.', $max_quantity), 'error');
        // Опционально очищаем корзину или убираем лишние товары
    }
}

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

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

add_filter('woocommerce_add_to_cart_validation', 'limit_product_quantity_in_cart', 10, 3);
function limit_product_quantity_in_cart($passed, $product_id, $quantity) {
    $max_quantity = 3; // Максимум для товара с ID 123
    $target_product_id = 123;

    if ($product_id == $target_product_id) {
        $current_quantity = 0;
        foreach (WC()->cart->get_cart() as $cart_item) {
            if ($cart_item['product_id'] == $target_product_id) {
                $current_quantity += $cart_item['quantity'];
            }
        }
        if (($current_quantity + $quantity) > $max_quantity) {
            wc_add_notice('Вы не можете добавить больше 3 единиц этого товара в корзину.', 'error');
            return false;
        }
    }
    return $passed;
}

3. Лимит на количество товаров по категории

Чтобы ограничить добавление товаров из определённой категории, например, "оптовые", примените такой код:

add_filter('woocommerce_add_to_cart_validation', 'limit_category_quantity_in_cart', 10, 3);
function limit_category_quantity_in_cart($passed, $product_id, $quantity) {
    $max_category_quantity = 10; // максимум товаров из категории
    $category_slug = 'optovye';

    if (has_term($category_slug, 'product_cat', $product_id)) {
        $current_quantity = 0;
        foreach (WC()->cart->get_cart() as $cart_item) {
            if (has_term($category_slug, 'product_cat', $cart_item['product_id'])) {
                $current_quantity += $cart_item['quantity'];
            }
        }
        if (($current_quantity + $quantity) > $max_category_quantity) {
            wc_add_notice('Вы не можете добавить больше '.$max_category_quantity.' товаров из категории "Оптовые".', 'error');
            return false;
        }
    }
    return $passed;
}

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

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

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

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

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

  • Не используйте тяжелые циклы и запросы к базе данных в хуках добавления в корзину.
  • Используйте минимально необходимое количество условий в функциях для снижения нагрузки.
  • Ограничивайте вывод ошибок с помощью wc_add_notice, чтобы пользователь сразу видел причины блокировки.
  • Если у вас большой магазин, подумайте об использовании специализированных плагинов для управления лимитами, чтобы избежать ошибок при обновлениях WooCommerce.

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

МетодОписаниеПлюсыМинусы
Код в functions.phpРучное добавление ограничений через хукиГибкость, бесплатно, адаптация под любые задачиТребует навыков, возможны ошибки при обновлениях
Плагин для лимитов корзиныГотовое решение с интерфейсомПростота настройки, поддержка, дополнительные функцииМожет влиять на производительность, платные варианты
Комбинированный подходПлагин с доработками через кодМаксимальная гибкость и стабильностьСложнее в поддержке, требует квалификации
Как правильно удалить плагин в WordPress без остаточных данных
30.12.2025
Как сделать загрузку изображений по требованию в WordPress для ускорения сайта
15.12.2025
Как избежать проблем с перезапуском AJAX-запросов в WordPress
07.04.2026
Как установить и настроить OmniVideo в WordPress
25.02.2026
Как установить лимит на количество постов в WordPress на странице архива
08.03.2026