В WooCommerce нет встроенной настройки «минимальное количество товара». Задачу решают плагины или пара десятков строк кода. Разберём оба пути и покажем, как не наступить на грабли, о которых молчит документация.
Зачем ограничивать количество и сумму заказа
Магазин упаковок, оптовая продажа или доставка с фиксированной ценой — каждый мелкий заказ бьёт по марже. Минимальный порог отсекает невыгодные покупки и поднимает средний чек. Эксперименты западных магазинов показывают рост среднего чека на 10–20% после ввода минимальной суммы. Клиент либо добавляет товары до порога, либо уходит к конкуренту — так работает фильтрация целевой аудитории.
Для оптового магазина на WooCommerce контроль количества не роскошь, а необходимость. B2B-заказы без минимального порога превращают склад в склад подарков: упаковка, доставка и обработка одного мелкого заказа стоят столько же, сколько крупного, а маржа в разы ниже. Ограничение количества товара в корзине решает эту проблему автоматически.
Обзор плагинов: что выбрать для минимального количества и суммы заказа
На маркетплейсе WooCommerce три популярных расширения. Сравним их по ключевым функциям, чтобы вы не тратили время на неактуальные решения.
| Возможность | Min Max Quantities | Quantities and Units | Order Minimum/Maximum Amount |
|---|---|---|---|
| Минимальное количество товара | Да | Да | Нет |
| Максимальное количество товара | Да | Да | Нет |
| Минимальная сумма заказа | Только PRO | Нет | Да |
| Правила для категорий товаров | Только PRO | Нет | Нет |
| Ограничение покупки по ролям пользователей | Только PRO | Нет | Нет |
| Шаг количества (Group of, Quantity Steps) | Да | Да | Нет |
| Последнее обновление | 2024 | 2022 | 2023 |
Quantities and Units for WooCommerce не обновлялся больше двух лет и имеет известную ошибку с вариативными товарами: блокировка не срабатывает, когда открывается товар с атрибутом по умолчанию. Не используйте его для нового магазина. Оптимальный бесплатный выбор — Min Max Quantities. Бесплатная версия закрывает базовые потребности: минимум, максимум и шаг количества. Продвинутые сценарии — категории, роли, минимальная сумма заказа — открываются в PRO.
Установка и подготовка магазина
Перед установкой плагина проверьте, что ваш сайт тянет требования. Min Max Quantities работает на WordPress 5.2+, WooCommerce 3.0+, PHP 7.4+ и MySQL 5.6+. Если на хостинге стоит PHP 7.2 — сначала обновите PHP, иначе получите белую страницу.
- В админ-панели откройте «Плагины → Добавить новый».
- В поиске введите «Min Max Quantities».
- Установите и активируйте плагин.
- Перейдите в карточку любого товара и найдите вкладку «Min/Max Quantity».
После активации плагин добавляет поля Minimum Quantity, Maximum Quantity и Group of в карточку товара. Никаких отдельных настроек для включения не нужно.
Настройка минимального количества товара в WooCommerce: пошаговая инструкция
Для простых товаров
Откройте товар, перейдите на вкладку «Min/Max Quantity». В поле Minimum Quantity введите минимальное значение, например 10. Maximum Quantity — максимальное, например 100. Сохраните товар. Покупатель физически не сможет добавить в корзину меньше 10 и больше 100 штук.
Для вариативных товаров
У вариативного товара поля появятся внутри каждой вариации. Разверните вариацию и задайте свой минимум и максимум. Обратите внимание на опцию Combine Variations: если включить её, корзина будет суммировать количество всех вариаций одного товара. Без неё каждая вариация считается отдельно, и правило сработает некорректно.
Известный баг вариативных товаров: если у товара выбраны атрибуты по умолчанию, минимальное количество иногда не блокируется при добавлении. Исправление — задать значение по умолчанию для всех атрибутов и протестировать сценарий без выбора параметров.
Приоритет правил: какое правило побеждает
Когда у вас настроены глобальные, категорийные, товарные правила и правила по ролям, действует строгая иерархия. Если для товара задан минимум 10, а для категории — 5, товарное правило перекроет категорийное.
| Уровень | Приоритет |
|---|---|
| Роль пользователя | Высший |
| Конкретная вариация | Выше товарного |
| Простой товар | Выше категорийного |
| Категория | Выше глобального |
| Глобальные настройки | Базовый уровень |
Это означает, что для оптового клиента с ролью «wholesale» вы можете задать минимум 50 штук, а для розницы — 2. Правило роли перекроет любые товарные и категорийные настройки.
Настройка шага количества и кратности покупки
Часто нужно продавать не поштучно, а упаковками. Если товар упакован по 6 штук, задайте поле Group of значение 6. Тогда покупатель сможет добавить 6, 12, 18 — но не 7 или 9. Это же поле в плагине называется Quantity Steps. В Min Max Quantities оно находится там же, где и минимум с максимумом.
Учтите правило: минимальное количество должно быть кратно шагу. Если минимум 5, а шаг 6 — получите конфликт, и корзина не пропустит ни одного значения. Такая логика работает и для сумм: можно задать шаг 1000 для суммы заказа в PRO-версии.
Минимальная сумма заказа
Минимальная сумма заказа — отдельный сценарий. Она защищает от невыгодных мелких заказов и повышает средний чек интернет-магазина. В Min Max Quantities эта возможность доступна только в PRO-версии. Если не готовы платить, используйте отдельный бесплатный плагин Order Minimum/Maximum Amount for WooCommerce.
Через плагин
Установите Order Minimum/Maximum Amount for WooCommerce. В его настройках задайте минимальную сумму заказа, например 3000 рублей, и текст сообщения об ошибке. Покупатель увидит предупреждение на странице корзины и в checkout, пока сумма не достигнет порога.
Без плагина: код в functions.php
Если не хотите ставить лишние расширения, добавьте в functions.php дочерней темы такой фрагмент. Он проверяет сумму корзины перед оформлением заказа и не даёт завершить покупку.
add_action('woocommerce_checkout_process', 'site_min_order_amount');
function site_min_order_amount() {
$minimum = 3000;
$subtotal = WC()->cart->subtotal;
if ($subtotal < $minimum) {
wc_add_notice(sprintf('Минимальная сумма заказа: %s ₽. Сейчас в корзине %s ₽.', $minimum, $subtotal), 'error');
}
}
Функция сработает только на checkout. Если хотите блокировать и корзину, повесьте аналогичный обработчик на хук woocommerce_before_cart.
Разные минимумы для оптовых и розничных клиентов
B2B-магазины часто дают оптовикам один порог, а рознице — другой. В Min Max Quantities PRO это делается через правила по ролям пользователей. Создайте роль «wholesale» и задайте для неё минимальное количество и минимальную сумму заказа отдельно.
Без плагина можно расширить проверку суммы по ролям своим кодом. Добавьте в functions.php:
add_action('woocommerce_checkout_process', 'site_role_min_order');
function site_role_min_order() {
if (!is_user_logged_in()) return;
$user = wp_get_current_user();
$role = $user->roles[0];
$min = ($role === 'wholesale') ? 10000 : 2000;
if (WC()->cart->subtotal < $min) {
wc_add_notice(sprintf('Минимальная сумма для вашей роли: %s ₽.', $min), 'error');
}
}
Аналогично можно проверять количество каждого товара в корзине, если не хочется ставить платный плагин.
Проверка правил: страница товара, корзина, checkout
После настройки пройдите весь путь покупателя: страницу товара, добавление в корзину, мини-корзину, страницу корзины и checkout. Минимум нужен на каждом этапе. Откройте магазин в режиме инкогнито — кеш страниц часто отдаёт старые версии, и правило «не работает» на деле просто скрыто кешем.
Если используете кастомную тему, AJAX-корзину или блоковый checkout, дополнительно проверьте совместимость плагина. Min Max Quantities заявляет совместимость с HPOS и темами на блоковом движке, но сторонние решения могут перехватывать добавление в корзину. Валидацию в таком случае стоит продублировать хуком на woocommerce_add_to_cart_validation.
Можно ли обойтись без плагинов?
Можно! Вы можете добавить этот код в functions.php или в плагин Code Snippets. Ниже — 5 независимых вариантов. Используйте только те блоки, которые вам нужны, остальные можно удалить или закомментировать.
<?php
/**
* =====================================================================
* WOOCOMMERCE — МИНИМАЛЬНОЕ КОЛИЧЕСТВО ТОВАРА В КОРЗИНЕ
* =====================================================================
*/
/**
* ---------------------------------------------------------------------
* ВАРИАНТ 1. Единое минимальное количество для ВСЕХ товаров магазина
* ---------------------------------------------------------------------
* Меняет значение поля "Количество" на странице товара и в корзине
* так, чтобы нельзя было купить меньше $min_qty штук.
*/
add_filter( 'woocommerce_quantity_input_args', 'wcsnippet_global_min_qty', 10, 2 );
function wcsnippet_global_min_qty( $args, $product ) {
$min_qty = 3; // <-- задайте нужный минимум здесь
$args['min_value'] = $min_qty;
// Если текущее количество меньше минимума — подставляем минимум по умолчанию
$args['input_value'] = max( $min_qty, $args['input_value'] );
return $args;
}
// Проверка при добавлении в корзину (на случай, если поле обошли — например, через AJAX/API)
add_filter( 'woocommerce_add_to_cart_validation', 'wcsnippet_global_min_qty_validate', 10, 3 );
function wcsnippet_global_min_qty_validate( $passed, $product_id, $quantity ) {
$min_qty = 3; // должно совпадать со значением выше
if ( $quantity < $min_qty ) {
wc_add_notice(
sprintf( 'Минимальное количество для заказа — %d шт.', $min_qty ),
'error'
);
$passed = false;
}
return $passed;
}
/**
* ---------------------------------------------------------------------
* ВАРИАНТ 2. Индивидуальный минимум для КОНКРЕТНОГО товара по ID
* ---------------------------------------------------------------------
* Удобно, если минимальное количество нужно только для нескольких SKU
* (например, товар продаётся только упаковками).
*/
add_filter( 'woocommerce_quantity_input_args', 'wcsnippet_min_qty_by_id', 10, 2 );
function wcsnippet_min_qty_by_id( $args, $product ) {
// Формат: ID товара => минимальное количество
$min_quantities = array(
123 => 5,
456 => 10,
);
$product_id = $product->get_id();
if ( isset( $min_quantities[ $product_id ] ) ) {
$min = $min_quantities[ $product_id ];
$args['min_value'] = $min;
$args['input_value'] = max( $min, $args['input_value'] );
}
return $args;
}
add_filter( 'woocommerce_add_to_cart_validation', 'wcsnippet_min_qty_by_id_validate', 10, 3 );
function wcsnippet_min_qty_by_id_validate( $passed, $product_id, $quantity ) {
$min_quantities = array(
123 => 5,
456 => 10,
);
if ( isset( $min_quantities[ $product_id ] ) && $quantity < $min_quantities[ $product_id ] ) {
wc_add_notice(
sprintf( 'Для этого товара минимальный заказ — %d шт.', $min_quantities[ $product_id ] ),
'error'
);
$passed = false;
}
return $passed;
}
/**
* ---------------------------------------------------------------------
* ВАРИАНТ 3. Минимум + ШАГ количества (например: от 6 шт., кратно 6)
* ---------------------------------------------------------------------
* Полезно для товаров, которые продаются "упаковками" (ящиками, паками).
* step определяет, на сколько можно увеличивать/уменьшать количество.
*/
add_filter( 'woocommerce_quantity_input_args', 'wcsnippet_min_qty_with_step', 10, 2 );
function wcsnippet_min_qty_with_step( $args, $product ) {
$min_qty = 6;
$step_qty = 6; // шаг — кратность (например, коробка = 6 штук)
$args['min_value'] = $min_qty;
$args['step'] = $step_qty;
$args['input_value'] = max( $min_qty, $args['input_value'] );
return $args;
}
add_filter( 'woocommerce_add_to_cart_validation', 'wcsnippet_min_qty_with_step_validate', 10, 3 );
function wcsnippet_min_qty_with_step_validate( $passed, $product_id, $quantity ) {
$min_qty = 6;
$step_qty = 6;
if ( $quantity < $min_qty ) {
wc_add_notice( sprintf( 'Минимальный заказ — %d шт.', $min_qty ), 'error' );
$passed = false;
} elseif ( $quantity % $step_qty !== 0 ) {
wc_add_notice(
sprintf( 'Количество должно быть кратно %d (например: %d, %d, %d...).', $step_qty, $step_qty, $step_qty * 2, $step_qty * 3 ),
'error'
);
$passed = false;
}
return $passed;
}
/**
* ---------------------------------------------------------------------
* ВАРИАНТ 4. Минимум по КАТЕГОРИИ товара
* ---------------------------------------------------------------------
* Все товары в указанной категории получают одинаковый минимум.
*/
add_filter( 'woocommerce_quantity_input_args', 'wcsnippet_min_qty_by_category', 10, 2 );
function wcsnippet_min_qty_by_category( $args, $product ) {
$category_slug = 'optom'; // slug категории (например, "Оптовые товары")
$min_qty = 20;
if ( has_term( $category_slug, 'product_cat', $product->get_id() ) ) {
$args['min_value'] = $min_qty;
$args['input_value'] = max( $min_qty, $args['input_value'] );
}
return $args;
}
add_filter( 'woocommerce_add_to_cart_validation', 'wcsnippet_min_qty_by_category_validate', 10, 3 );
function wcsnippet_min_qty_by_category_validate( $passed, $product_id, $quantity ) {
$category_slug = 'optom';
$min_qty = 20;
if ( has_term( $category_slug, 'product_cat', $product_id ) && $quantity < $min_qty ) {
wc_add_notice(
sprintf( 'Товары этой категории продаются от %d шт.', $min_qty ),
'error'
);
$passed = false;
}
return $passed;
}
/**
* ---------------------------------------------------------------------
* ВАРИАНТ 5. Индивидуальный минимум ЧЕРЕЗ ПОЛЕ В АДМИНКЕ (гибкий способ)
* ---------------------------------------------------------------------
* Добавляет поле "Мин. количество" на вкладку "Инвентарь" в редакторе
* товара. Менеджер магазина сможет сам задавать минимум для каждого
* товара без изменения кода.
*/
// 5.1 — добавляем поле в админку товара
add_action( 'woocommerce_product_options_inventory_product_data', 'wcsnippet_add_min_qty_field' );
function wcsnippet_add_min_qty_field() {
woocommerce_wp_text_input( array(
'id' => '_wcsnippet_min_qty',
'label' => 'Мин. количество для заказа',
'placeholder' => '1',
'desc_tip' => true,
'description' => 'Оставьте пустым, если минимальное количество не требуется.',
'type' => 'number',
'custom_attributes' => array(
'min' => '1',
'step' => '1',
),
) );
}
// 5.2 — сохраняем значение поля
add_action( 'woocommerce_process_product_meta', 'wcsnippet_save_min_qty_field' );
function wcsnippet_save_min_qty_field( $post_id ) {
$min_qty = isset( $_POST['_wcsnippet_min_qty'] ) ? absint( $_POST['_wcsnippet_min_qty'] ) : '';
update_post_meta( $post_id, '_wcsnippet_min_qty', $min_qty );
}
// 5.3 — применяем минимум на фронтенде (страница товара / корзина)
add_filter( 'woocommerce_quantity_input_args', 'wcsnippet_apply_min_qty_field', 10, 2 );
function wcsnippet_apply_min_qty_field( $args, $product ) {
$min_qty = get_post_meta( $product->get_id(), '_wcsnippet_min_qty', true );
if ( $min_qty && $min_qty > 1 ) {
$args['min_value'] = (int) $min_qty;
$args['input_value'] = max( (int) $min_qty, $args['input_value'] );
}
return $args;
}
// 5.4 — проверяем минимум при добавлении в корзину
add_filter( 'woocommerce_add_to_cart_validation', 'wcsnippet_validate_min_qty_field', 10, 3 );
function wcsnippet_validate_min_qty_field( $passed, $product_id, $quantity ) {
$min_qty = get_post_meta( $product_id, '_wcsnippet_min_qty', true );
if ( $min_qty && $min_qty > 1 && $quantity < $min_qty ) {
$product = wc_get_product( $product_id );
wc_add_notice(
sprintf(
'Минимальное количество для товара "%s" — %d шт.',
$product->get_name(),
(int) $min_qty
),
'error'
);
$passed = false;
}
return $passed;
}
/**
* =====================================================================
* ВАЖНЫЕ ЗАМЕЧАНИЯ
* =====================================================================
* 1. woocommerce_quantity_input_args меняет только интерфейс (поле
* "Количество"), но НЕ защищает от прямого запроса. Поэтому валидация
* через woocommerce_add_to_cart_validation обязательна — иначе
* ограничение можно обойти через API, AJAX или изменённый HTML.
*
* 2. Если используете несколько вариантов одновременно (например,
* Вариант 4 "по категории" и Вариант 5 "по полю в админке"),
* убедитесь, что фильтры не перезаписывают друг друга — используйте
* max() между значениями или логику приоритета.
*
* 3. Для страницы корзины (изменение количества в самой корзине)
* те же хуки woocommerce_quantity_input_args работают автоматически,
* т.к. WooCommerce использует их и на странице /cart/.
*
* 4. Готовые плагины-альтернативы (если не хочется работать с кодом):
* "Min/Max Quantities" (от WooCommerce) или "YITH WooCommerce
* Minimum/Maximum Quantity". Они дают похожий функционал через UI.
* =====================================================================
*/
Частые ошибки и как их избежать
Правило минимального количества не срабатывает на странице товара — проверьте поля в самой вариации. Значение 0 в настройках min-max не работает как правило: если минимум нулевой, он игнорируется. Задавайте 0 только когда хотите отключить ограничение.
Шаг количества конфликтует с минимумом, если минимум не кратен шагу. Перед сохранением пересчитайте значения. А если кеш страниц отдаёт старый вариант без новых полей, просто очистите кеш и проверьте инкогнито-режимом.
Мини-корзина и AJAX-кнопки «В корзину» могут игнорировать правила, если они не отправляют стандартные запросы WooCommerce. В таких случаях добавьте проверку через JavaScript или используйте дополнительную валидацию на сервере.
Вопросы про минимум в WooCommerce
Только через functions.php с хуком woocommerce_add_to_cart_validation. Для простого ограничения напишите функцию, которая проверяет количество каждого товара и не даёт добавить меньше минимума. Но плагин min max quantities делает то же самое без программирования, поэтому для продуктового магазина быстрее использовать его.
Проверьте кеш, AJAX-корзину и кастомную тему. Откройте магазин в инкогнито, отключите кеш страниц и убедитесь, что плагин совместим с вашим checkout. Также посмотрите, не перекрывает ли другое расширение стандартный обработчик добавления в корзину.
Задайте шаг количества: в Min Max Quantities это поле Group of, в других плагинах — Quantity Step. Например, Group of = 6 позволяет добавить 6, 12, 18, но не 7. Следите, чтобы минимальное количество было кратно шагу.
