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

13

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

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

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

Счастливчик люк
источник

Ответы:

17

Файлы ядра и плагина никогда не должны редактироваться напрямую, так как любые обновления могут перезаписать ваши изменения. Если вы посмотрите в источнике 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 'Was:' . str_replace( '<ins>', ' Now:<ins>', $price );
}
Milo
источник
Спасибо за ответ, кстати, почему, когда я удаляю содержимое основной функции, она все равно возвращает вывод как обычно
Lucky Luke
1
Итак, скажем, если была продажа, и она возвращает меня <del>£2</del><ins>£1</ins>, как я могу изменить это Was:<del>£2</del> Now:<ins>£1</ins>с помощью фильтра?
Счастливчик Люк
не уверен, не слишком знаком с WooCommerce, возможно, другой класс расширяет его. см. правку выше для вашего второго вопроса.
Майло
Брилл,;), отличная помощь
Lucky Luke
Я пытаюсь узнать, что происходит в woocommerce_get_price_htmlфильтре по умолчанию для $price. На моем сайте woocommerce показывает 0 $ вместо бесплатных продуктовFree!
SKMohammadi
5
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 ) .' Retail </del>  | </div><div class="live-colst">'.( ( is_numeric( $to ) ) ? woocommerce_price( $to ) : $to ) .'Our Price</div>';
      } else {
        $to = $product->price;
        return '<div class="live-colst">' . ( ( is_numeric( $to ) ) ? woocommerce_price( $to ) : $to ) . 'Our Price</div>';
      }
   } else {
     return '<div class="live-colst">0 Our Price</div>';
   }
}
Панкадж Джа
источник
5
Даже если ваш код может работать (а у меня нет оснований полагать, что это не так), это сайт Q / A, а не хранилище кода, поэтому лучше делиться опытом и знаниями, объясняющими ваш код, а не просто писать код без объяснения причин. ни встроенные комментарии ...
gmazzap
код также использует свойства объекта, что не очень хорошо.
Святослав Маринов