Как отображать цены на вариативные товары по умолчанию в WooCommerce?

10 окт. 2013 г., 19:19:30
Просмотры: 36K
Голосов: 3

Я хотел бы отображать цену вариативного товара по умолчанию во вкладке "цена от" на странице отдельного товара, но без префикса "от".

Для покупателя может быть запутанным видеть цену "от" и под ней цены для каждого варианта, которые меняются после выбора варианта.

смотрите прикрепленное изображение

Таким образом, вместо двух наборов полей с ценами я хочу отображать только один, независимо от того, является ли это простым или вариативным товаром.

Пример отображения цен вариативного товара в WooCommerce

2
Комментарии

Вы уже искали на сайте?

kaiser kaiser
10 окт. 2013 г. 20:10:32

Я ответил на очень похожий вопрос в этом ответе здесь: https://stackoverflow.com/questions/43617537/move-woocommerce-variation-price/49414293#49414293

Lucas Bustamante Lucas Bustamante
21 мар. 2018 г. 21:08:03
Все ответы на вопрос 2
0

Функция 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, будет использоваться, потому что она инициализируется раньше.

Чтобы отображать цену вариации при загрузке страницы товара с вариациями, необходимо выбрать вариацию по умолчанию на странице редактирования товара.

10 окт. 2013 г. 21:29:52
0

Я использую тему "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;
}

Тогда ваша цена будет отображаться как единая цена, и это будет самая низкая цена из вашего вариативного товара. Это работает. Я использовал это.

20 февр. 2016 г. 23:55:50