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

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

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

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

1. Определяем максимальное количество товаров

Для примера установим ограничение на 10 товаров в корзине. Это можно изменить по необходимости.

2. Добавляем проверку при добавлении товара в корзину

Используем хук woocommerce_add_to_cart_validation, чтобы запретить добавлять товар, если суммарное количество в корзине превышает лимит.

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

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

Проверяем изменение количества в корзине через AJAX или при обновлении корзины, используя хук woocommerce_update_cart_validation.

add_filter('woocommerce_update_cart_validation', 'limit_cart_items_quantity_update', 10, 4);
function limit_cart_items_quantity_update($passed, $cart_item_key, $values, $quantity) {
    $max_items = 10;
    $cart = WC()->cart->get_cart();
    $total_quantity = 0;
    foreach ($cart as $key => $item) {
        if ($key === $cart_item_key) {
            $total_quantity += $quantity; // Новое количество для данного товара
        } else {
            $total_quantity += $item['quantity'];
        }
    }
    if ($total_quantity > $max_items) {
        wc_add_notice(sprintf('Общее количество товаров в корзине не может превышать %d.', $max_items), 'error');
        return false;
    }
    return $passed;
}

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

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

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

  • Ошибка: Ограничение не срабатывает при AJAX добавлении товара.
    Причина: Кэширование или конфликт плагинов, которые изменяют процесс добавления в корзину.
    Решение: Отключите сторонние кэш-плагины или протестируйте код на чистой установке WooCommerce.
  • Ошибка: Сообщения об ошибках не отображаются пользователю.
    Причина: В теме или плагине отключены вызовы wc_print_notices() или аналогичные функции.
    Решение: Проверьте шаблоны темы, добавьте do_action('woocommerce_before_cart') или wc_print_notices() в нужные места.
  • Ошибка: Ограничение не учитывает количество товаров в корзине, а только количество добавляемого товара.
    Причина: Неправильный подсчет текущего количества товаров.
    Решение: Используйте WC()->cart->get_cart_contents_count() для подсчета общего количества товаров.

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

  • Добавляем код в дочернюю тему или в отдельный плагин, чтобы не потерять изменения при обновлениях.
  • Проверяйте наличие корзины и инициализацию WooCommerce перед вызовом методов, например if (WC()->cart).
  • Не используйте сложные запросы или тяжелые операции в хуках добавления в корзину — это замедлит процесс.

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

МетодОписаниеПлюсыМинусы
Код на хуках WooCommerce (как в статье) Добавляет проверку при добавлении и обновлении корзины через PHP Гибко, не требует плагинов, легко модифицируется Требует базовых знаний, может конфликтовать с кастомными плагинами
Плагин ограничения корзины Готовое решение с настройками в админке Простота настройки, поддержка Может нагружать сайт, платные версии, ограниченная гибкость
JavaScript-валидация на фронтенде Проверка лимита в браузере пользователя Быстрая обратная связь Можно обойти, не заменяет серверную валидацию
Автоматическое удаление старого контента в WordPress по дате с примером кода
20.02.2026
Автоматизация создания резервных копий WordPress с помощью PHP-кода
16.12.2025
Как удалить или изменить авторские права в метаданных WordPress
08.02.2026
Как автоматизировать проверку и удаление спам-комментариев в WordPress
25.01.2026
Как избежать разрушения данных при массовой обработке товаров WooCommerce
22.04.2026