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

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

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

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

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

Нужно использовать хук 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 = 5; // Максимальное количество товаров в корзине

    $current_qty = 0;
    foreach (WC()->cart->get_cart() as $cart_item) {
        $current_qty += $cart_item['quantity'];
    }

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

    return $passed;
}

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

Пользователи могут менять количество товаров прямо на странице корзины. Нужно ограничить максимальное значение в поле количества и дополнительно проверить на сервере при обновлении корзины.

// Ограничение максимума через JS для страницы корзины
add_action('wp_footer', 'limit_cart_quantity_js');
function limit_cart_quantity_js() {
    if (is_cart()) {
        ?>
        <script>
        jQuery(function($) {
            var maxQty = 5;
            $('.qty').attr('max', maxQty);
            $('.qty').on('input', function() {
                var val = parseInt($(this).val());
                if (val > maxQty) {
                    $(this).val(maxQty);
                } else if (val < 1 || isNaN(val)) {
                    $(this).val(1);
                }
            });
        });
        </script>
        <?php
    }
}

// Проверка при обновлении корзины
add_action('woocommerce_check_cart_items', 'validate_cart_quantities');
function validate_cart_quantities() {
    $max_items = 5;
    $total_qty = 0;
    foreach (WC()->cart->get_cart() as $cart_item) {
        $total_qty += $cart_item['quantity'];
    }
    if ($total_qty > $max_items) {
        wc_add_notice(sprintf('Общее количество товаров в корзине не может превышать %d.', $max_items), 'error');
    }
}

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

  • Попробуйте добавить в корзину товаров больше, чем разрешено (например, 6 при лимите 5) — должна появиться ошибка и товар не добавится.
  • На странице корзины поле количества должно ограничивать ввод значением не выше лимита.
  • При попытке обновить корзину с превышением лимита появится сообщение об ошибке, и количество не изменится.

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

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

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

  • Код не создает дополнительных запросов к базе — работает с объектом корзины.
  • Не используйте слишком сложную логику проверки лимита, чтобы не ухудшить производительность.
  • В случае необходимости динамического лимита (например, для разных ролей пользователей) добавьте проверку current_user_can().
  • Для улучшения UX используйте AJAX-валидацию количества на странице товара и корзины.

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

МетодПлюсыМинусыПример
Код на PHP (хуки WooCommerce) Полный контроль, работает на сервере, легко кастомизируется Требует навыков программирования, нужно тестировать Пример выше
Плагины ограничения корзины Простота установки, готовый функционал Может быть избыточным, влияние на производительность, не всегда бесплатные WooCommerce Max Quantity, Min/Max Quantities for WooCommerce
JavaScript на фронтенде Улучшение UX, блокировка сразу на клиенте Можно обойти, не заменяет серверную проверку Пример JS из кода выше
Как создать свой плагин для автоматизации задач в WordPress
27.11.2025
Как использовать transientы в WordPress для кэширования данных
25.02.2026
Как создать собственный шорткод в WordPress
03.11.2025
Как использовать хук pre_get_posts для фильтрации запросов в WordPress
19.03.2026
Как удалить неиспользуемые посты в WordPress автоматически
08.03.2026