• Вопрос без рабочей ссылки на проблему считается риторическим. Без ссылки и скриншота - провокацией!

Решено Убрать диапазон цен в вариативном товаре, если цены одинаковые

Image CMS

nordla

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

У нас есть функция get_price_html(), в ней как я понял и расписаны варианты вывода цен, в том или ином случае. Вот тут как раз не понимаю, как расписать условие типа if(...) в этой функции. И вообще, в правильном я хоть направлении смотрю?

PHP:
public function get_price_html( $price = '' ) {
        $prices = $this->get_variation_prices( true );

        // No variations, or no active variation prices
        if ( $this->get_price() === '' || empty( $prices['price'] ) ) {
            $price = apply_filters( 'woocommerce_variable_empty_price_html', '', $this );
        } else {
            $min_price = current( $prices['price'] );
            $max_price = end( $prices['price'] );
            $price     = min_price !== $max_price ? sprintf( _x( '%1$s–%2$s', 'Price range: from-to', 'woocommerce' ), wc_price( $min_price ), wc_price( $max_price ) ) : wc_price( $min_price );
            $is_free   = $min_price == 0 && $max_price == 0;

            if ( $this->is_on_sale() ) {
                $min_regular_price = current( $prices['regular_price'] );
                $max_regular_price = end( $prices['regular_price'] );
                $regular_price = min_regular_price !== $max_regular_price ? sprintf( _x( '%1$s–%2$s', 'Price range: from-to', 'woocommerce' ), wc_price( $min_regular_price ), wc_price( $max_regular_price ) ) : wc_price( $min_regular_price );
                $price             = apply_filters( 'woocommerce_variable_sale_price_html', $this->get_price_html_from_to( $regular_price, $price ) . $this->get_price_suffix(), $this );
            } elseif ( $is_free ) {
                $price = apply_filters( 'woocommerce_variable_free_price_html', __( 'Free!', 'woocommerce' ), $this );
            } else {
                $price = apply_filters( 'woocommerce_variable_price_html', $price . $this->get_price_suffix(), $this );
            }
        }
        return apply_filters( 'woocommerce_get_price_html', $price, $this );
    }
Спасибо
 

searchingman

Гуру
Местный
#2
Типовое поведение WooCommerce. Если цены у вариаций товара одинаковые, то показывается не диапазон цен, но одна цена.
У Вас точно у всех вариаций одинаковая цена? Может у каких-то вариаций установлена цена распродажи?
Может влияет какой-то плагин?
 

nordla

Новичок
#3
Типовое поведение WooCommerce. Если цены у вариаций товара одинаковые, то показывается не диапазон цен, но одна цена.
У Вас точно у всех вариаций одинаковая цена? Может у каких-то вариаций установлена цена распродажи?
Может влияет какой-то плагин?
Спасибо за подсказку и извините за поздний ответ.
Проблема была в строке:
PHP:
$price     = min_price !== $max_price ? sprintf( _x( '%1$s–%2$s', 'Price range: from-to', 'woocommerce' ), wc_price( $min_price ), wc_price( $max_price ) ) : wc_price( $min_price );
В скачанной теме у переменной min_price был убран идентификатор переменной "$"
Вот так всё примитивно оказалось.