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

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

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

Диагностика проблемы

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

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

Добавим проверку срабатывания при добавлении товара в корзину и при обновлении количества товаров. Для этого используем хук 'woocommerce_add_to_cart_validation' и 'woocommerce_check_cart_items'. Вот пример кода, который ограничит общее количество товаров в корзине 10 единицами:

function wporg_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;
}
add_filter( 'woocommerce_add_to_cart_validation', 'wporg_limit_cart_items_quantity', 10, 3 );

// Проверка при обновлении корзины
function wporg_check_cart_items_limit() {
    $max_items = 10;
    $current_quantity = WC()->cart->get_cart_contents_count();
    if ( $current_quantity > $max_items ) {
        wc_add_notice( sprintf('Максимально допустимое количество товаров в корзине — %d.', $max_items), 'error' );
    }
}
add_action( 'woocommerce_check_cart_items', 'wporg_check_cart_items_limit' );

Этот код можно добавить в functions.php дочерней темы или в отдельный плагин.

Альтернативные варианты

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

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

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

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

  • Ошибка: Ограничение не работает, товары добавляются сверх лимита.
    Причина: Кэширование, или конфликт с плагинами, которые переопределяют добавление в корзину.
    Решение: Очистите кэш сайта и браузера, временно отключите другие плагины, чтобы выявить конфликт.
  • Ошибка: Сообщения об ошибках не отображаются.
    Причина: Тема не выводит уведомления WooCommerce корректно.
    Решение: Проверьте код темы, добавьте вызов woocommerce_output_all_notices() в шаблон корзины.
  • Ошибка: Ограничение действует только при добавлении, но не при обновлении корзины.
    Причина: Не подключен хук 'woocommerce_check_cart_items'.
    Решение: Проверьте, что функция проверки добавлена и активна.

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

  • Минимизируйте количество проверок и запросов к базе — используйте встроенные методы WooCommerce.
  • Не используйте слишком сложные условия для ограничения — это может замедлить процесс добавления в корзину.
  • Если магазин большой, рассмотрите использование серверного кэширования с исключением страниц корзины и оформления заказа.
  • Обязательно тестируйте все изменения на staging-среде, чтобы избежать сбоев в рабочем магазине.

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