В интернет-магазинах на WordPress часто возникает необходимость ограничить количество покупок одного товара для конкретного пользователя. Это может быть важно для акций, распродаж, эксклюзивных предложений или предотвращения перепродажи. В этой статье мы подробно разберём, как установить лимит покупок для пользователей в WordPress, используя WooCommerce и кастомный код, а также рассмотрим плагины, которые помогут автоматизировать процесс.
Почему важно ограничивать количество покупок
Ограничение количества покупок помогает:
- Защитить склад от быстрого распродажи определённых товаров.
- Сделать акционные предложения более честными для всех покупателей.
- Предотвратить мошенничество и перепродажу товаров.
- Управлять запасами и планировать продажи.
Несмотря на то, что WooCommerce не имеет встроенной функции ограничения количества покупок на пользователя, это можно реализовать с помощью кода или сторонних плагинов.
Ограничение количества покупок с помощью кода
Добавление проверки лимита при добавлении товара в корзину
Для начала рассмотрим пример, как с помощью хука woocommerce_add_to_cart_validation ограничить количество покупок определённого товара для пользователя. В этом примере ограничение будет на 3 единицы товара с ID 123:
add_filter('woocommerce_add_to_cart_validation', 'wppay_limit_product_purchase', 10, 3);
function wppay_limit_product_purchase($passed, $product_id, $quantity) {
$limit = 3; // Максимальное количество
$user_id = get_current_user_id();
if (!$user_id) return $passed; // Для гостей ограничение не применяется
$target_product_id = 123; // ID товара с лимитом
if ($product_id == $target_product_id) {
// Получаем количество уже купленных товаров
$orders = wc_get_orders(array(
'customer_id' => $user_id,
'status' => array('completed','processing'),
'limit' => -1
));
$purchased_qty = 0;
foreach ($orders as $order) {
foreach ($order->get_items() as $item) {
if ($item->get_product_id() == $target_product_id) {
$purchased_qty += $item->get_quantity();
}
}
}
// Проверяем, не превышает ли новое количество лимит
if (($purchased_qty + $quantity) > $limit) {
wc_add_notice(sprintf('Вы можете купить не более %d единиц этого товара. У вас уже есть %d.', $limit, $purchased_qty), 'error');
return false;
}
}
return $passed;
}Этот код проверяет историю заказов текущего пользователя и блокирует добавление товара в корзину, если суммарное количество превысит лимит.
Расширение функционала: лимит на все товары в категории
Если нужно ограничить покупку товаров из определённой категории, то можно модифицировать код следующим образом:
function wppay_limit_category_purchase($passed, $product_id, $quantity) {
$limit = 5; // Максимум товаров из категории
$category_slug = 'sale'; // Слаг категории
$user_id = get_current_user_id();
if (!$user_id) return $passed;
if (has_term($category_slug, 'product_cat', $product_id)) {
$orders = wc_get_orders(array(
'customer_id' => $user_id,
'status' => array('completed','processing'),
'limit' => -1
));
$purchased_qty = 0;
foreach ($orders as $order) {
foreach ($order->get_items() as $item) {
if (has_term($category_slug, 'product_cat', $item->get_product_id())) {
$purchased_qty += $item->get_quantity();
}
}
}
if (($purchased_qty + $quantity) > $limit) {
wc_add_notice(sprintf('Вы можете купить не более %d товаров из акции. У вас уже есть %d.', $limit, $purchased_qty), 'error');
return false;
}
}
return $passed;
}
add_filter('woocommerce_add_to_cart_validation', 'wppay_limit_category_purchase', 10, 3);Использование плагинов для ограничения количества покупок
Если вы не хотите писать код, есть несколько проверенных плагинов для WooCommerce, которые реализуют ограничения покупок:
- WooCommerce Max Quantity — позволяет задать максимальное и минимальное количество для каждого товара.
- WooCommerce Purchase Limits — удобный плагин с гибкими настройками по пользователям, ролям и категориям.
- YITH WooCommerce Minimum Maximum Quantity — один из популярных плагинов с возможностью задавать ограничения на уровне товаров и категорий.
Все эти плагины можно найти и установить с официального репозитория WordPress или приобрести расширенные версии на wpshop.ru.
Советы по тестированию и отладке ограничений
После внедрения ограничений важно тщательно протестировать функционал. Вот несколько рекомендаций:
- Проверьте добавление товара в корзину разными пользователями, включая гостей.
- Сделайте несколько заказов с разными статусами — completed, processing, cancelled — чтобы понять, как они влияют на подсчёт.
- Убедитесь, что сообщения об ошибках понятны и информативны для пользователя.
- Проверьте работу с корзиной, если в ней уже есть товары с ограничениями.
Для отладки удобно использовать плагин Query Monitor, который поможет отследить ошибки и время выполнения запросов.
Выводы и рекомендации по реализации лимитов в WordPress
Ограничение количества покупок — частая задача для интернет-магазинов на WooCommerce. С помощью приведённого кода вы можете реализовать лимит на уровне одного товара или категории, а плагины помогут автоматизировать настройки без программирования.
Если вы используете WPGPT или Clearfy Pro, они могут помочь оптимизировать работу сайта и избежать конфликтов с другими расширениями.
Внедряйте ограничения аккуратно, чтобы не ухудшить пользовательский опыт и не потерять клиентов. Правильное сообщение об ограничениях и тестирование — залог успеха.