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

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

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

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

Как проверить текущие ограничения в WooCommerce

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

  • Проверьте, не ограничивает ли тема или плагины количество товаров.
  • В консоли разработчика браузера проверьте ошибки JavaScript при добавлении товаров.
  • Проверьте серверные логи на предмет ошибок при обработке корзины.

Если ограничений нет, переходим к реализации.

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

Рассмотрим пример ограничения максимального количества товаров в корзине до 5 единиц суммарно (сумма всех товаров):

<?php
// Функция для проверки и ограничения количества товаров в корзине
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;

    // Текущий общий счётчик товаров в корзине
    $cart_count = 0;
    foreach (WC()->cart->get_cart() as $cart_item) {
        $cart_count += $cart_item['quantity'];
    }

    // Если после добавления превысится лимит, блокируем добавление
    if (($cart_count + $quantity) > $max_items) {
        wc_add_notice(sprintf('Вы не можете добавить больше %d товаров в корзину.', $max_items), 'error');
        return false;
    }
    return $passed;
}
?>

Эта функция проверяет суммарное количество товаров в корзине и не позволяет добавить больше, чем указано в $max_items.

Если необходимо ограничить количество для каждого отдельного товара, можно изменить логику так:

<?php
add_filter('woocommerce_add_to_cart_validation', 'limit_quantity_per_product', 10, 3);
function limit_quantity_per_product($passed, $product_id, $quantity) {
    $max_per_product = 3; // Максимум одного товара
    $current_quantity = 0;

    foreach (WC()->cart->get_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;
}
?>

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

Чтобы проверить, что ограничение работает:

  1. Очистите корзину в WooCommerce.
  2. Добавляйте товары в корзину по одному или несколькими единицами.
  3. При достижении лимита должна появляться ошибка с предупреждением, и добавление не происходит.
  4. Проверьте как на фронтенде (через уведомления WooCommerce), так и в админке, что корзина соответствует заданным ограничениям.

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

  • Ошибка: Ограничение не срабатывает
    Проверьте, что код добавлен в functions.php активной темы или в отдельный плагин и что нет ошибок PHP.
    Убедитесь, что хук woocommerce_add_to_cart_validation не переопределяется другими плагинами.
  • Ошибка: Сообщение об ошибке не отображается
    Проверьте, что тема выводит уведомления WooCommerce через wc_print_notices() или аналогичные функции.
  • Ошибка: Ограничение считается неверно при ajax добавлении
    При ajax-запросах иногда корзина обновляется с задержкой. Можно добавить принудительное обновление с помощью JavaScript и wp_localize_script.

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

  • Используйте кэширование с осторожностью: кеш страниц может показывать неверные данные по корзине.
  • Не перегружайте корзину сложными проверками — держите логику простой и быстрой.
  • Для сложных ограничений можно расширить функционал через REST API, но это не всегда оправдано.
  • Регулярно тестируйте совместимость с обновлениями WooCommerce и PHP.

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

СпособПлюсыМинусыПример
Код в functions.php (хуки WooCommerce)Простота, гибкость, не требует плагиновНужно понимать PHP, поддержка своими силамиПоказан в статье
Плагины ограничения корзины (например, WooCommerce Max Quantity)Быстрое решение, интерфейс настроекМогут быть платными, избыточные функцииWooCommerce Max Quantity
Кастомные REST API и JS-валидацияСложные сценарии, интерактивностьСложность реализации, нагрузкаТребует разработки
Как использовать хуки для оптимизации загрузки WordPress
14.12.2025
Как использовать WP8 для автоматизации обновлений и резервного копирования в WordPress
18.03.2026
Как удалить кеш и оптимизировать WordPress без плагинов
09.02.2026
Как убрать время из ссылок WordPress
24.03.2026
WooCommerce: установка ограничений на количество товаров в корзине
10.05.2026