Исключить определенный товар Woocommerce из общего правила, как это сделать?
Здравствуйте, есть вот такой код, который устанавливает для всех товаров начальное кол-во 10
//For variable products add_filter( 'woocommerce_available_variation', 'custom_qty_available_variation_args', 10, 3 ); function custom_qty_available_variation_args( $data, $product, $variation ) { $data['min_qty'] = 10; return $data; } /**/ |
//For variable products add_filter( 'woocommerce_available_variation', 'custom_qty_available_variation_args', 10, 3 ); function custom_qty_available_variation_args( $data, $product, $variation ) { $data['min_qty'] = 10; return $data; } /**/
Подскажите как исключить из этого правила некоторые товары?
Дополнительно:
Ответы:
Вторым аргументом в эту функцию передаётся $product - это объект класса WC_Product_Variable. Можно в функции получать его различные свойства и/или мета-поля, если они были зарегистрированы - и исходя из их значений либо выставлять min_qty, либо нет
Два варианта:
- Совсем в лоб - исключать по перечислению ID ($product->get_id())
- По ID продукта получать его мета-поле, скажем, "Минимальное значение этого продукта" - и устанавливать его как min_qty
Спасибо большое. Нашёл решение в виде плагинов:
https://wordpress.org/plugins/wc-min-max-quantities/
https://wordpress.org/plugins/woo-min-max-quantity...
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Исключать товары из общего правила можно по ID товара, ID вариации, категории, мета-полю или отдельной настройке. В вашем фильтре для вариативных товаров доступны сразу
$productи$variation, поэтому самый простой вариант — проверить ID и вернуть данные без изменения.add_filter('woocommerce_available_variation', 'custom_qty_available_variation_args', 10, 3); function custom_qty_available_variation_args($data, $product, $variation) { $excluded_products = [123, 456]; $excluded_variations = [789]; if (in_array($product->get_id(), $excluded_products, true)) { return $data; } if (in_array($variation->get_id(), $excluded_variations, true)) { return $data; } $data['min_qty'] = 10; return $data; }
Если исключения должны настраиваться из админки, лучше не хранить ID в коде. Добавьте ACF/мета-поле, например
disable_min_qty, и проверяйте его:if (get_post_meta($product->get_id(), 'disable_min_qty', true)) { return $data; }
Для простых товаров нужен другой фильтр:
woocommerce_quantity_input_args. Если правило должно работать и в карточке, и в корзине, проверьте оба места, потому что изменениеmin_qtyв данных вариации влияет в основном на фронтенд выбора вариации.Исключать товары из правила можно по ID товара, ID вариации, категории, мета-полю или тегу. В вашем фильтре доступны и родительский товар
$product, и сама вариация$variation. Поэтому сначала проверяем, относится ли товар к исключениям, и только потом задаёмmin_qty.add_filter('woocommerce_available_variation', 'custom_qty_available_variation_args', 10, 3); function custom_qty_available_variation_args($data, $product, $variation) { $excluded_products = [123, 456]; // ID родительских товаров. $excluded_variations = [789]; // ID конкретных вариаций. if (in_array($product->get_id(), $excluded_products, true)) { return $data; } if (in_array($variation->get_id(), $excluded_variations, true)) { return $data; } $data['min_qty'] = 10; return $data; }
Если исключать нужно по категории:
if (has_term('special-category', 'product_cat', $product->get_id())) { return $data; }
Если таких товаров много, удобнее завести ACF/метаполе, например
disable_min_qty, и ставить галочку в карточке товара. Тогда условие будет таким:if (get_post_meta($product->get_id(), 'disable_min_qty', true)) { return $data; }
Не забудьте, что для вариативного товара количество может дополнительно проверяться на уровне корзины. Если покупатель сможет отправить меньшее количество вручную, добавьте аналогичную проверку в
woocommerce_add_to_cart_validation.