WooCommerce: Как редактировать get_price_html

27 янв. 2013 г., 21:15:35
Просмотры: 118K
Голосов: 19

Я пытаюсь отредактировать значение цены для отдельного товара.

В single-product/price.php есть вызов шаблона $product->get_price_html. Как можно отредактировать эту функцию/метод, чтобы изменить способ отображения HTML?

В данный момент, даже если я удалю все содержимое функции, расположенной в class-wc-product, она все равно каким-то чудом отображается. Кто-нибудь знает почему?

0
Все ответы на вопрос 3
6
26

Файлы ядра и плагинов никогда не следует редактировать напрямую, так как любые обновления могут перезаписать ваши изменения. Если вы посмотрите в исходном коде WooCommerce метод get_price_html, там доступно несколько фильтров для изменения вывода функции.

Смотрите add_filter в Кодексе для получения дополнительной информации о добавлении фильтров к вызовам apply_filters.

Из get_price_html в class-wc-product:

return apply_filters('woocommerce_get_price_html', $price, $this);

Таким образом, чтобы добавить свой собственный фильтр:

add_filter( 'woocommerce_get_price_html', 'wpa83367_price_html', 100, 2 );
function wpa83367_price_html( $price, $product ){
    return 'Было:' . str_replace( '<ins>', ' Сейчас:<ins>', $price );
}
27 янв. 2013 г. 22:06:09
Комментарии

Спасибо за ответ, кстати, почему когда я удаляю содержимое основной функции, она все равно возвращает вывод как обычно

Lucky Luke Lucky Luke
27 янв. 2013 г. 22:09:15

Допустим, если была распродажа и возвращается <del>£2</del><ins>£1</ins>, как я могу изменить это на Было:<del>£2</del> Теперь:<ins>£1</ins> с помощью фильтра?

Lucky Luke Lucky Luke
27 янв. 2013 г. 22:19:58

Не уверен, не слишком знаком с WooCommerce, возможно, другой класс его расширяет. Смотрите правку выше для вашего второго вопроса.

Milo Milo
27 янв. 2013 г. 22:27:09

Брилльно ;), отличная помощь

Lucky Luke Lucky Luke
27 янв. 2013 г. 22:33:46

Я пытаюсь понять, что происходит в фильтре по умолчанию woocommerce_get_price_html для $price. На моем сайте WooCommerce показывает 0$ для бесплатных товаров вместо Free!

SKMohammadi SKMohammadi
7 дек. 2016 г. 11:42:22

В каком файле находится эта функция? Не могу найти файл. Спасибо

Si8 Si8
19 июн. 2020 г. 05:03:05
Показать остальные 1 комментариев
2
function wpa83368_price_html( $price,$product ){
   // return $product->price;
    if ( $product->price > 0 ) {
      if ( $product->price && isset( $product->regular_price ) ) {
        $from = $product->regular_price;
        $to = $product->price;
        return '<div class="old-colt"><del>'. ( ( is_numeric( $from ) ) ? woocommerce_price( $from ) : $from ) .' Розничная цена </del>  | </div><div class="live-colst">'.( ( is_numeric( $to ) ) ? woocommerce_price( $to ) : $to ) .'Наша цена</div>';
      } else {
        $to = $product->price;
        return '<div class="live-colst">' . ( ( is_numeric( $to ) ) ? woocommerce_price( $to ) : $to ) . 'Наша цена</div>';
      }
   } else {
     return '<div class="live-colst">0 Наша цена</div>';
   }
}
3 янв. 2014 г. 16:13:45
Комментарии

Даже если ваш код может работать (и у меня нет причин думать, что это не так), это сайт вопросов и ответов, а не репозиторий кода. Поэтому лучше делиться экспертизой и знаниями, объясняя свой код, а не просто писать код без объяснений и комментариев...

gmazzap gmazzap
3 янв. 2014 г. 16:38:31

код также использует свойства объектов, что не очень хорошо.

Svetoslav Marinov Svetoslav Marinov
8 мая 2018 г. 21:50:06
0

в файле functions.php

function h08831n_get_price($product){
        $price_html = '<div class="product-price">';
        if ( $product->get_price() > 0 ) {
            if ($product->get_price() && $product->get_regular_price()) {
                $from = $product->get_regular_price();
                $to = $product->get_price();
                $price_html .= '<del>'. ( ( is_numeric( $from ) ) ? wc_price( $from ) : $from ) .'</del><ins>'.( ( is_numeric( $to ) ) ? wc_price( $to ) : $to ) .'</ins>';
            }else{
                $to = $product->get_price();
                $price_html .= '<ins>' . ( ( is_numeric( $to ) ) ? wc_price( $to ) : $to ) . '</ins>';
            }
        }else{
            $price_html .= '<div class="free">бесплатно</div>';
        }
        $price_html .= '</div>';
        return $price_html;
    }

в месте, где нужно отобразить цену, например в single-product.php

global $product;
echo h08831n_get_price($product);

также можно удалить wc_price из функции, чтобы убрать стандартные HTML-форматы WooCommerce

20 дек. 2020 г. 19:31:52