Домой Каталог: Дополнения WP-Recall Users Files Market Ограничить количество продаваемых товаров
11ответ(ов) в теме
Валерий
не в сети 4 года
На сайте с 20.03.2015
Участник
Тем 35
Сообщения 87
1
15:35
Версия WP-Recall: 16.10.11
Версия дополнения: 1.7.7

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

0
Вова (Otshelnik-Fm)
не в сети 1 день
На сайте с 27.01.2013
Участник
Тем 43
Сообщения 18654
2
15:44

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

Валерий сказал(а)
То решение, сейчас не рабочее.

какое "то"? Приводите ссылку, чтобы понять о чём вы говорите

0
Валерий
не в сети 4 года
На сайте с 20.03.2015
Участник
Тем 35
Сообщения 87
3
15:48

Вот, эта тема

Вы не можете просматривать опубликованные ссылки
0
Андрей CS
не в сети 13 часов
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16943
4
18:45

а почему вы решили, что предложеное решение в указанной теме нерабочее? вполне себе рабочее

0
Валерий
не в сети 4 года
На сайте с 20.03.2015
Участник
Тем 35
Сообщения 87
5
02:45

Андрей CS сказал(а)
а почему вы решили, что предложеное решение в указанной теме нерабочее? вполне себе рабочее

Еще раз протестировал, понял, что код не срабатывает для бесплатного товара.
Вот мой код:

/*Ограничение товара*/ 
add_action('rcl_payment_order','check_sale_order',30);
function check_sale_order($order_id){

	$order = rcl_get_order($order_id);
	foreach($order->products as $product){
		$maxSale = get_post_meta($product->product_id,'maxsale',true);
		$saleAmount = get_post_meta($product->product_id,'sales-product',true);

		if(!$saleAmount) $saleAmount = 0;
                if($saleAmount >= $maxSale){
			//если достигнут предел продаж, то снимаем с продажи
			$values = ['1'];
			update_post_meta($product->product_id,'outsale', $values);
		}
    }
}

0
Валерий
не в сети 4 года
На сайте с 20.03.2015
Участник
Тем 35
Сообщения 87
6
17:59

Андрей, можете подсказать в чем проблема? Почему функция не учитывает бесплатный товар? Спасибо.

0
Андрей CS
не в сети 13 часов
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16943
7
18:08

я не вижу в коде никакой проблемы

1
Валерий
не в сети 4 года
На сайте с 20.03.2015
Участник
Тем 35
Сообщения 87
8
18:23

Разобрался кажется, для бесплатной покупки идет другой action - rcl_insert_order.
Вот рабочий код для платного и бесплатного товара:

/*Ограничение товара*/ 
add_action('rcl_payment_order','check_sale_order',30);
function check_sale_order($order_id){
	$order = rcl_get_order($order_id);
	foreach($order->products as $product){
		$maxSale = get_post_meta($product->product_id,'maxsale',true);// метаполе, которым ограничиваем количество товара
		$saleAmount = get_post_meta($product->product_id,'sales-product',true);
		if(!$saleAmount) $saleAmount = 0;
        if($saleAmount >= $maxSale){
			//если достигнут предел продаж, то снимаем с продажи
			$values = ['1'];
			update_post_meta($product->product_id,'outsale', $values);
		}
    }
}
/*Ограничение бесплатного товара*/ 
add_action('rcl_insert_order','check_sale_order_free',30);
function check_sale_order_free($order_id){
	$order = rcl_get_order($order_id);
	foreach($order->products as $product){
		$maxSale = get_post_meta($product->product_id,'maxsale',true);
		$saleAmount = get_post_meta($product->product_id,'sales-product',true);
		if(!$saleAmount) $saleAmount = 0;
        if($saleAmount >= $maxSale){
			//если достигнут предел продаж, то снимаем с продажи
			$values = ['1'];
			update_post_meta($product->product_id,'outsale', $values);
		}
    }
}

1
Валерий
не в сети 4 года
На сайте с 20.03.2015
Участник
Тем 35
Сообщения 87
9
21:35

Для тех, кто интересуется подробностями, как это сделать.
В форме публикации товара нужно добавить два новых поля.
1 поле. Максимальное количество товаров, Meta-key: maxsale, тип - количество
2 поле. Снять с продажи, Meta-key: outsale, тип - чекбоксы, в опциях - 1

Ну и в файл функций добавить код из прошлого сообщения.

2
Андрей CS
не в сети 13 часов
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16943
10
10:04

Валерий сказал(а)
Вот рабочий код для платного и бесплатного товара

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

1
Валерий
не в сети 4 года
На сайте с 20.03.2015
Участник
Тем 35
Сообщения 87
11
14:34

Скорректировал код, должен быть рабочий. Спасибо Андрею за подсказки

/*Ограничение платного товара*/ 
add_action('rcl_payment_order','check_sale_order',30);
function check_sale_order($order_id){
if(!is_user_logged_in()) return false;
 $order = rcl_get_order($order_id);
  foreach($order->products as $product){
	$maxSale = get_post_meta($product->product_id,'maxsale',true);
	$price_products = get_post_meta($product->product_id,'price-products',true);
	if (($maxSale < 1)||($price_products < 1)) return false; // если нет ограничения количества или товар бесплатный - возвращаем false	
	$saleAmount = get_post_meta($product->product_id,'sales-product',true);
	if(!$saleAmount) $saleAmount = 0;
	if($saleAmount >= $maxSale){
		//если достигнут предел продаж, то снимаем с продажи
		$values = ['1'];
		update_post_meta($product->product_id,'outsale', $values);
	}
}
}
/*Ограничение бесплатного товара*/ 
add_action('rcl_insert_order','check_sale_order_free',30);
function check_sale_order_free($order_id){
	
 $order = rcl_get_order($order_id);
  foreach($order->products as $product){
    $maxSale = get_post_meta($product->product_id,'maxsale',true);
	$price_products = get_post_meta($product->product_id,'price-products',true);
	if (($maxSale < 1)||($price_products > 0)) return false; // если нет ограничения количества или товар платный - возвращаем false		
	$saleAmount = get_post_meta($product->product_id,'sales-product',true);
	if(!$saleAmount) $saleAmount = 0;
	if($saleAmount >= $maxSale){
		//если достигнут предел продаж, то снимаем с продажи
		$values = ['1'];
		update_post_meta($product->product_id,'outsale', $values);
		}
    }
}

1
Вы не имеете права на публикацию сообщений в этой теме