Задача. В вариативных товарах WooCommerce цена выводится в виде диапазона, когда есть несколько вариаций с разной ценой. Это не всегда удобно т.к. занимает больше места и, например в карточках товаров может не помещаться. Необходимо вывести в вариативных товарах минимальную цену с префиксом «от» (Изображение 1).
Решение. Для вывода в вариативных товарах минимальной цены вместо диапазона можно использовать Код 1 и 2 (покороче и подлинее, кто как любит) в functions.php
, они дают идентичный результат:
1 2 3 4 5 6 7 8 |
## Вариант 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 |
## Вариант 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; } |