Возвращаем диапазон цены вариативного товара как в WooCommerce 2.0

woocommerce_21_variable_from_price[1]

С выходом WooCommerce 2.1, вышедшей не так давно, многие пользователи заметили крупные изменения в плагине, вроде реорганизованной страницы настроек и внедрение нового REST API.

Целью каждого крупного релиза WooCommerce является упрощение и ускорение, а с WooCommerce 2.1 это означало, что множество настроек, которые редко использовались, были убраны, и были добавлены некоторые изменения в оформлении по запросам пользователей.

Одним из таких изменений стало то, что было убрано значение «От: $x» для цены вариативных товаров, а вместо него теперь выводится диапазон цен “$x – $y”. Такое новое форматирование цены для вариативных товаров может подходить не всем и тут в бой вступает наш сегодняшний сниппет.

Этот сниппет изменит новый формат вывода диапазона цен и вы получите старый добрый «От: $x», к которому пользователи привыкли в WooCommerce 2.0. Вам необходимо будет добавить следующий код в файл functions.php вашей темы:

<?php
// Используем формат цены вариативного товара WC 2.0
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;
}
?>

По всем вопросам и отзывам просьба писать в комментарии ниже.

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

VN:F [1.9.22_1171]
Rating: 5.0/5 (14 votes cast)

Об авторе ADv

Занимаюсь разработкой сайтов и магазинов на WordPress. Оказываю платные помощь и консультации. Skype: advokat_b
  • Евгений

    Спасибо, действительно помогло с решением задачи =)

    • ADv

      Всегда пожалуйста.

      • Игорь

        а как сделать варианты цен не в самом товаре а в категории?

      • Олег

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

        Нашел только фунцию:

        get_variation_price( string $min_or_max = ‘min’, boolean $display = false )

        Есть ли функция, позволяющая получить массив всех цен? Или возможно есть инное решение данной проблемы?

        Спасибо

  • Timur

    Спасибо, как раз то, что нужно))

  • Сергей

    Спасибо, но есть одно замечание, В моей теме в карточке товара цена появлялась после выбора нужных покупателю свойств товара, а с данным сниппетом в карточке товара сразу высвечивается минимальная цена «От:…» и т.д Что нужно убрать или добавить в код, чтобы решить эту задачу. Сожалею, но я не силен в PHP…

  • Korzinni Gifts

    Все сделал как и написали, но не дает написать цену от 🙁

    • ADv

      Речь идет о вариативном товаре, когда, например, синяя футболка может стоить $5, а красная — $15. Вот в этом случае будет отображаться цена: От $5

      • Korzinni Gifts

        Понял, может поможете как в моем случаи сделать, перед ценой От: поставить, собака не дает. сайт korzinni.ru

        • ADv

          Напишите в скайп advokat_b , на пальцах не объяснить.

  • Лариса

    Добрый день! Не совсем по теме, конечно, но очень нужна помощь. Делаю выборку товаров со скидкой вот таким запросом:
    $args = array( ‘posts_per_page’ => 10, ‘post_type’ => ‘product’, ‘meta_query’ => array(
    array(
    ‘key’ => ‘_sale_price’,
    ‘value’ => 0,
    ‘compare’ => ‘>’,
    ‘type’ => ‘numeric’
    ),
    ) );

    Но он выводит только простые товары. А мне нужно выводить вариативные. Как мне их получать, подскажите, пожалуйста.

  • Алексей

    А как бы сделать так чтобы на страничке товара, отображалась только цена вариации, а статичная(минимальная) убиралась??

  • My name

    Спасибо, пригодилось

  • Андрей

    Подскажите пожалуйста, а то уже голову сломал.
    Если в вариативном товаре цены одинаковые, но разные атрибуты, как сделать, что бы выводилась одна цена, а соответственно, если цены разные, то оставить диапазон?
    Спасибо

  • Alex

    Здравствуйте!
    Как можно реализовать следующий момент (все по порядку):
    1. есть вариативный товар, который в зависимости от изменения атрибута (цвет товара) меняет цену;
    2. на странице каталога у товара под названием, соответственно, выводится диапазон цен, что не есть хорошо для поставленной задачи;
    3. есть вариант (найденный на просторах сети, и заключающийся добавлением строк в functions.php) реализовать вывод цены в формате «от «минимальная цена», но это тоже не подходит для достижения нужной цели;
    4. собственно вопрос: как сделать так, чтобы под товаром выводилась цена конкретной вариации, той, которая в настройках вариаций товара указана по умолчанию?
    Заранее спасибо за помощь!

    Если знаете ответ, напишите в скайп brusgood

    • Максим Пономаренко

      Меня тоже этот момент интересует, может кто то помочь?

Scroll To Top