Думаю для решения данной ошибки нужно выводить данный код если в вариативном товаре есть скидка, только не знаю к какой функции обращаться
нужно что-то типо 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 ;
}
}
}