Как отображать цены на вариативные товары по умолчанию в WooCommerce?
Я хотел бы отображать цену вариативного товара по умолчанию во вкладке "цена от" на странице отдельного товара, но без префикса "от".
Для покупателя может быть запутанным видеть цену "от" и под ней цены для каждого варианта, которые меняются после выбора варианта.
смотрите прикрепленное изображение
Таким образом, вместо двух наборов полей с ценами я хочу отображать только один, независимо от того, является ли это простым или вариативным товаром.

Функция woocommerce_template_single_price()
, отвечающая за отображение "обычной" цены, является переопределяемой (pluggable), что означает, что её можно перезаписать, добавив следующий код в ваш functions.php
:
//переопределяем функцию WooCommerce
function woocommerce_template_single_price() {
global $product;
if ( ! $product->is_type('variable') ) {
woocommerce_get_template( 'single-product/price.php' );
}
}
Это работает, потому что в файле woocommerce-template.php
функция инициализируется следующим образом:
if ( ! function_exists( 'woocommerce_template_single_price' ) ) {
function woocommerce_template_single_price() {
woocommerce_get_template( 'single-product/price.php' );
}
}
Как видно, условие проверяет если функция не существует, но функция уже существует. Версия, которую мы добавляем в functions.php
, будет использоваться, потому что она инициализируется раньше.
Чтобы отображать цену вариации при загрузке страницы товара с вариациями, необходимо выбрать вариацию по умолчанию на странице редактирования товара.

Я использую тему "Porto" и тоже столкнулся с этой проблемой. Вы можете решить проблему, добавив этот код в файл functions.php
вашей дочерней темы:
// Самая низкая цена
add_filter( 'woocommerce_variable_sale_price_html', 'wc_wc20_variation_price_format', 10, 2 );
add_filter( 'woocommerce_variable_price_html', 'wc_wc20_variation_price_format', 10, 2 );
function wc_wc20_variation_price_format( $price, $product ) {
// Основная цена
$prices = array( $product->get_variation_price( 'min', true ), $product->get_variation_price( 'max', true ) );
$price = $prices[0] !== $prices[1] ? sprintf( __( '%1$s', 'woocommerce' ), wc_price( $prices[0] ) ) : wc_price( $prices[0] );
// Цена со скидкой
$prices = array( $product->get_variation_regular_price( 'min', true ), $product->get_variation_regular_price( 'max', true ) );
sort( $prices );
$saleprice = $prices[0] !== $prices[1] ? sprintf( __( '%1$s', 'woocommerce' ), wc_price( $prices[0] ) ) : wc_price( $prices[0] );
if ( $price !== $saleprice ) {
$price = '<del>' . $saleprice . '</del> <ins>' . $price . '</ins>';
}
return $price;
}
Тогда ваша цена будет отображаться как единая цена, и это будет самая низкая цена из вашего вариативного товара. Это работает. Я использовал это.
