Задача. В вариативных товарах WooCommerce цена выводится в виде диапазона, когда есть несколько вариаций с разной ценой. Это не всегда удобно т.к. занимает больше места и, например в карточках товаров может не помещаться. Необходимо вывести в вариативных товарах минимальную цену с префиксом «от» (Изображение 1).
Решение. Для вывода в вариативных товарах минимальной цены вместо диапазона можно использовать Код 1 и 2 (покороче и подлинее, кто как любит) в functions.php
, они дают идентичный результат:
1
2
3
4
5
6
7
8
9
10
|
## Вариант 1: Вывод минимальной цены в вариативных товарах
add_filter(‘woocommerce_variable_price_html’, ‘wpcraft_variation_price_min’, 10, 2);
function wpcraft_variation_price_min( $price, $product ) {
return ‘от ‘ . wc_price($product–>get_price());
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
## Вариант 2: Вывод минимальной цены в вариативных товарах
add_filter( ‘woocommerce_variable_price_html’, ‘wpcraft_variation_price_min’, 20, 2 );
function wpcraft_variation_price_min( $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;
}
|