@andrey-drug

Как указать в php-скрипте исключение для категории?

Здравствуйте!

Код:
add_filter('woocommerce_add_to_cart_validation', 'check_and_limit_cart_items', 10, 3);

function check_and_limit_cart_items ($passed, $product_id, $quantity) {
	$category = 'subscriptions';
	// Если корзина пуста
	if ( WC()->cart->is_empty() )
		return $passed;
	// Поиск товаров из категории подписок
	foreach (WC()->cart->get_cart() as $cart_item) {
		if ( has_term($category, 'product_cat', $cart_item['product_id']) ) {
			// Показать сообщение
			wc_add_notice(__('A subscription is already in cart (Other items are not allowed in cart).', 'woocommerce' ), 'error');
			// Не добавляем новые товары
			return false;
		}
	}
	return $passed;
}


Никак не соображу, как добавить исключение для товаров из категории со слагом subscriptions. Чтобы оттуда можно было добавлять

Помогите, пожалуйста, разобраться, с ночи пробую разные варианты со строкой:
foreach (WC()->cart->get_cart() as $cart_item) {
if ( has_term($category, 'product_cat', $cart_item['product_id']) ) {
// Показать сообщение
wc_add_notice(__('A subscription is already in cart (Other items are not allowed in cart).', 'woocommerce' ), 'error');
// Не добавляем новые товары
return false;
}

и не выходит у меня ничего
  • Вопрос задан
  • 99 просмотров
Решения вопроса 1
abezgauz
@abezgauz
web-кузнец
Здравствуйте.

Во-первых,
>> Помогите, пожалуйста, разобраться, с ночи пробую разные варианты со строкой:
Строками, а не строкой.

Во-вторых, "строка" тут не при чём.
// Запрет на добавление в корзину товаров из категории подписок,
// если уже есть товар из категории подписок в корзине
add_filter('woocommerce_add_to_cart_validation', 'for_subscriptions_limit_cart_items', 10, 3);

function for_subscriptions_limit_cart_items ($passed, $product_id, $quantity) {

	$subscription_category = 'subscriptions';
	// Если корзина пуста
	if ( WC()->cart->is_empty() ) {
		return $passed;
	}

	$subscription_in_cart = false;

	// Поиск товаров из категории подписок в корзине
	foreach (WC()->cart->get_cart() as $cart_item) {
		if ( has_term($subscription_category, 'product_cat', $cart_item['product_id']) ) {
			$subscription_in_cart = true;
		}
	}

	if ($subscription_in_cart) {
		// проверяем, что новый товар тоже из категории подписок
		if ( has_term($subscription_category, 'product_cat', $product_id) ) {
			// добавляем товар в корзину
			return $passed;

		// если новый товар не из категории подписок
	} else {
		// Показать сообщение
		wc_add_notice(__('A subscription is already in cart (Other items are not allowed in cart).', 'woocommerce' ), 'error');
		// Не добавляем новые товары
		return false;
		}
	}
	return $passed;
}


И третье :) Если не ошибаюсь, я продолжил мысль вашего старого вопроса, который вы удалили: Раздельная оплата товаров или очередной «купить в один клик» — как?

Меня заинтересовала идея. Анатолий мне там подсказал решение, гляньте, если что.

Если я ошибся и это не вашу мысль я продолжил - пардон, обознался.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Почему используется has_term, он же ищет метки и теги в публикациях но не в объекте в корзине. Внутри цикла скорее всего придётся делать ещё цикл что бы разобрать объект товара, можете посмотреть что вы получаете в самом цикле? Добавьте принт в цикл

print_r($cart_item['product_id']);
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы