Как установить и настроить лимит покупок в WooCommerce для конкретных товаров или категорий

Диагностика задачи: зачем нужен лимит покупок в WooCommerce

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

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

Ограничение количества товара в корзине по отдельному товару

Для ограничения максимального количества единиц одного товара в корзине можно использовать хук woocommerce_add_to_cart_validation. Ниже пример кода, который запрещает добавлять в корзину более 3 единиц товара с ID 123:

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

    if ($product_id == $target_product_id) {
        // Получаем количество товара уже в корзине
        $cart_quantity = 0;
        foreach (WC()->cart->get_cart() as $cart_item) {
            if ($cart_item['product_id'] == $product_id) {
                $cart_quantity += $cart_item['quantity'];
            }
        }
        if (($cart_quantity + $quantity) > $limit) {
            wc_add_notice(sprintf('Максимальное количество товара %d ограничено %d единицами.', $product_id, $limit), 'error');
            return false;
        }
    }
    return $passed;
}

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

Чтобы ограничить количество товаров из определённой категории, например, максимум 5 единиц суммарно для всех товаров категории с слагом limited-category, используйте следующий код:

add_filter('woocommerce_add_to_cart_validation', 'limit_quantity_per_category', 10, 3);
function limit_quantity_per_category($passed, $product_id, $quantity) {
    $category_slug = 'limited-category';
    $limit = 5;

    if (has_term($category_slug, 'product_cat', $product_id)) {
        $cart_quantity = 0;
        foreach (WC()->cart->get_cart() as $cart_item) {
            if (has_term($category_slug, 'product_cat', $cart_item['product_id'])) {
                $cart_quantity += $cart_item['quantity'];
            }
        }
        if (($cart_quantity + $quantity) > $limit) {
            wc_add_notice(sprintf('Общее количество товаров из категории "%s" ограничено %d единицами.', $category_slug, $limit), 'error');
            return false;
        }
    }
    return $passed;
}

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

  • Добавьте в корзину товар с ID 123 более 3 раз — должно появиться уведомление об ошибке и запрет на добавление.
  • Попробуйте добавить суммарно более 5 товаров из категории limited-category — тоже должна сработать проверка с ошибкой.
  • Проверьте разные комбинации: разные товары вне категории, чтобы убедиться, что ограничения не мешают.
  • Откройте страницу корзины и проверьте итоговое количество и уведомления.

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

  • Не срабатывает ограничение при добавлении товаров: Убедитесь, что код добавлен в functions.php вашей дочерней темы или в плагин для кастомных функций, и что WooCommerce активен.
  • Ошибки при определении категории: Проверьте корректность слага категории. Используйте get_term_by('slug', 'limited-category', 'product_cat') для проверки.
  • Конфликты с другими плагинами корзины: Если вы используете кеширование корзины или плагины оптимизации, временно отключите их для теста.
  • Сообщения об ошибках не отображаются: Проверьте, что в теме присутствует вывод уведомлений WooCommerce — функция wc_print_notices() должна быть вызвана.

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

  • Не используйте жёстко прописанные ID товаров и категорий — лучше вынести их в настройки или использовать константы.
  • Код выполняется при каждом добавлении в корзину — избегайте дорогостоящих операций внутри цикла.
  • Если много товаров и категорий, кэшируйте результаты проверки категорий, например, через transient API.
  • Для больших магазинов с WooCommerce рекомендуем тестировать нагрузку на сервер при большом количестве запросов к корзине.

Сравнение вариантов реализации ограничения лимитов в WooCommerce

МетодПреимуществаНедостатки
Код в functions.phpПолный контроль, бесплатно, быстрое внедрениеТребует навыков разработки, сложнее поддерживать
Плагины (например, WooCommerce Max Quantity)Удобный интерфейс, поддержка, дополнительные функцииМожет быть платным, нагружает сайт, конфликтует с кастомами
Кастомный плагинИзолированное решение, легко включать/выключатьТребует разработки, поддержки, тестирования
Автоматическое создание конкурсов в WordPress
21.03.2026
Как избежать проблем с кэшем WooCommerce после обновления товара
01.08.2026
Как использовать WPGraphQL для эффективного доступа к данным WordPress
21.07.2026
Как удалить вредоносные скрипты с сайта WordPress: эффективные методы и инструменты
08.12.2025
Как автоматически создавать отчёты по посетителям WordPress
08.02.2026