@sasha761

Где я ошибся в данном коде?

Добрый день, плагин Query monitor подсказывает что данный функционал (код) вызывает php ошибки.
Этот код нужен для того что бы в вариативных товарах выводился процент скидки
add_filter('woocommerce_variable_price_html', 'mycustom_variation_price2', 10, 2 );

function mycustom_variation_price2( $price, $product ) {
#Step 1: Get product varations

$available_variations = $product->get_available_variations();

#Step 2: Get product variation id
$variation_id=$available_variations[0]['variation_id']; // Getting the variable id of just the 1st product. You can loop $available_variations to get info about each variation.

#Step 3: Create the variable product object
$variable_product1= new WC_Product_Variation( $variation_id );

#Step 4: You have the data. Have fun :)
$regular_price = $variable_product1 ->regular_price;
$sales_price = $variable_product1 ->sale_price;

$percentage = round( ( ( $regular_price - $sales_price ) / $regular_price ) * 100 );

return $price .'<div class="sale">'. sprintf( __(' Sale %s', 'woocommerce' ), $percentage . '%' ).'</div>';
}

А вот какие ошибки пишет
5cfe7b87ae149370947912.png

думаю может не к тому фильтру обращаюсь ....
  • Вопрос задан
  • 73 просмотра
Решения вопроса 1
@sasha761 Автор вопроса
Думаю для решения данной ошибки нужно выводить данный код если в вариативном товаре есть скидка, только не знаю к какой функции обращаться
нужно что-то типо if (variable_product_have_sale) {....

решил данный вопрос. Код не оптимизированный но все же ...
Вот код :
add_filter('woocommerce_variable_price_html', 'mycustom_variation_price2', 10, 2 );

function mycustom_variation_price2( $price, $product ) {
	if ( ! is_admin() && ((is_shop() || is_product_category() || is_archive()))) {
		
#Step 1: Get product varations

$available_variations = $product->get_available_variations();

#Step 2: Get product variation id
$variation_id=$available_variations[0]['variation_id']; // Getting the variable id of just the 1st product. You can loop $available_variations to get info about each variation.

#Step 3: Create the variable product object
$variable_product1= new WC_Product_Variation( $variation_id );

#Step 4: You have the data. Have fun :)
$regular_price = $variable_product1 ->regular_price;
$sales_price = $variable_product1 ->sale_price;

		if ( $product->is_on_sale() ) {
$percentage = round( ( ( $regular_price - $sales_price ) / $regular_price ) * 100 );
			 return $price .'<div class="sale">'. sprintf( __(' Sale %s', 'woocommerce' ), $percentage . '%' ).'</div>';
		}
		else {
		return $price ;	
		}
	}
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы