Как вывести цену со скидкой в вариативном товаре woocommerce?

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

Сегодня заметил такую проблему в вариативном товаре.

Стоит цена на вариацию 100р, я делаю скидку «новая цена» 50р. а в карточке товара отображается старая цена, но когда я добавляю товар в корзину, он туда попадает по новой цене 50р.

Я не понимаю где я намутил своими кривыми руками, второй день мучаюсь…

Я понял что шаблон вывода цены это {{{ data.variation.price_html }}} где его редактировать?

Я помню что добавил этот код чтобы убрать диапазон цен:

add_filter('woocommerce_variable_price_html', 'custom_variation_price', 10, 2);
function custom_variation_price( $price, $product ) {

$price = '';

$price .= woocommerce_price($product->get_price());

return $price;

}

Я заблокировал вывод диапазона цен вверху, в файле плагина: plugins/woocommerce/templates/single-product/price.php

вот этот код: 


<p class="price"><?php echo $product->get_price_html(); ?></p>

Когда я обратно разблокировал этот код, я вверху увидел цену 50р но как ее переместить вниз там где старая цена которая выводится шаблоном {{{ data.variation.price_html }}}

Что-то такое намутил что просто ппц…

Ребята, кто понимает, помогите пожалуйста решить эту проблему…

О перечеркнутой старой цене я уже просто молчу(

 

Заранее спасибо, если нужна еще какая-то информация, спрашивайте.

Спасибо!

Добавить Комментарий
Ответ
add_filter( 'woocommerce_variable_price_html', 'truemisha_variation_price', 20, 2 );
 
function truemisha_variation_price( $price, $product ) {
 
	$min_regular_price = $product->get_variation_regular_price( 'min', true );
	$min_sale_price = $product->get_variation_sale_price( 'min', true );
	$max_regular_price = $product->get_variation_regular_price( 'max', true );
	$max_sale_price = $product->get_variation_sale_price( 'max', true );
 
	if ( ! ( $min_regular_price == $max_regular_price && $min_sale_price == $max_sale_price ) ) {
		if ( $min_sale_price < $min_regular_price ) {
			$price = sprintf( 'от <del>%1$s</del><ins>%2$s</ins>', wc_price( $min_regular_price ), wc_price( $min_sale_price ) );
		} else {
			$price = sprintf( 'от %1$s', wc_price( $min_regular_price ) );
		}
	}
 
	return $price;
 
}
Решение не мое, и признано сложным из-за сопоставления вариаций цен товаров.
Добавить Комментарий

Вот несколько технических решений, я все равно не понимаю, глядя на код, что точно вам подойдет.

 

Добавить Комментарий

Ваш ответ

Размещая свой ответ, вы соглашаетесь с правилами сайта.