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

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

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

  • упрощения логистики;
  • контроля минимальных/максимальных закупок;
  • предотвращения ошибок при заказах;
  • регулирования акций или специальных предложений.
Без такого ограничения покупатели могут добавить слишком много товаров, что приведёт к ошибкам на стороне склада или оплаты.

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

1. Используем хук woocommerce_check_cart_items для проверки содержимого корзины

Добавим в файл functions.php вашей активной темы следующий код, чтобы ограничить корзину максимум 5 товарами (суммарно по количеству):

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

2. Объяснение кода

Сначала получаем все товары из корзины и суммируем их количество. Если сумма превышает лимит, выводим ошибку и удаляем последний добавленный товар (чтобы предотвратить превышение).

3. Тестирование

Добавьте в корзину товары и попытайтесь добавить больше 5. Если ограничение сработало, вы увидите сообщение об ошибке, а лишний товар не добавится.

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

Чтобы убедиться, что ограничение работает корректно:

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

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

  • Ошибка: сообщение об ошибке не появляется
    Проверьте, что хук woocommerce_check_cart_items подключён именно так, как в примере, и что код добавлен в functions.php или в плагин для кастомного кода.
  • Ошибка: удаляется не последний добавленный товар
    В коде функция key($cart) возвращает ключ первого элемента массива. Для корректного удаления последнего добавленного товара можно хранить ID товара при добавлении через более сложную логику. В простом случае удаление первого товара предотвращает превышение, но может быть неудобным.
  • Ошибка: ограничение не учитывает вариации товаров
    Количество считается по всем товарам вместе, включая вариации. Если нужна фильтрация, добавьте проверку типа товара или ID.

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

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

Альтернативные способы ограничения количества товаров в корзине

МетодПлюсыМинусыПример использования
Код на PHP (описанный выше) Гибкость, отсутствие плагинов, контроль над логикой Требует навыков разработки, возможны ошибки при неправильном коде Хук woocommerce_check_cart_items для проверки и сообщения
Плагин (например, WooCommerce Max Quantity) Простота установки, готовый интерфейс Зависимость от стороннего кода, возможное замедление сайта Настройка лимитов через админку
JS-ограничение на фронте Быстрая реакция для пользователя Можно обойти, не защищает сервер Скрипты для блокировки кнопки добавления

Расширенный пример: ограничение по категории товаров

Допустим, нужно ограничить количество товаров из определённой категории, например, "Акции". Добавим проверку в функцию:

add_action('woocommerce_check_cart_items', 'limit_cart_items_by_category');
function limit_cart_items_by_category() {
    $max_items = 3; // Лимит для категории "Акции"
    $category_slug = 'akcii';
    $cart = WC()->cart->get_cart();
    $category_quantity = 0;
    foreach ($cart as $cart_item) {
        $product_id = $cart_item['product_id'];
        if (has_term($category_slug, 'product_cat', $product_id)) {
            $category_quantity += $cart_item['quantity'];
        }
    }
    if ($category_quantity > $max_items) {
        wc_add_notice(sprintf('Максимальное количество товаров из категории "%s" — %d.', $category_slug, $max_items), 'error');
        // Можно удалить последний добавленный товар из этой категории или отменить добавление
    }
}

Скачать WP с оф. сайта Магазин проверенных платных тем