WooCommerce: Jak edytować get_price_html

13

Próbuję edytować wartość ceny dla jednego produktu.

W single-product/price.phpjest wywołanie szablonu $product->get_price_html. Jak mogę edytować tę funkcję / metodę, aby zmienić sposób prezentacji HTML?

W tej chwili nawet jeśli usunę całą zawartość funkcji, która się w class-wc-productnim znajduje, nadal cudownie wyświetla? Czy ktoś wie dlaczego?

Lucky Luke
źródło

Odpowiedzi:

17

Pliki rdzenia i wtyczek nigdy nie powinny być edytowane bezpośrednio, ponieważ wszelkie aktualizacje mogą zastąpić zmiany. Jeśli spojrzysz na źródło WooCommerce na tę get_price_htmlmetodę, dostępnych jest wiele filtrów do modyfikowania danych wyjściowych funkcji.

Zobacz add_filterw Kodeksie, aby uzyskać więcej informacji na temat dodawania filtrów do apply_filterspołączeń.

Od get_price_htmlw class-wc-product:

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

Aby dodać własny filtr:

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
źródło
Dzięki za odpowiedź, dlaczego po usunięciu zawartości funkcji głównej nadal zwraca ona wynik w normalny sposób
Lucky Luke,
1
Powiedzmy, że jeśli była wyprzedaż, a ona mi zwróci <del>£2</del><ins>£1</ins>, jak mogę to zmienić Was:<del>£2</del> Now:<ins>£1</ins>za pomocą filtra?
Lucky Luke
nie jestem pewien, niezbyt zaznajomiony z WooCommerce, być może inna klasa go rozszerza. patrz edycja powyżej dla drugiego pytania.
Milo
Brill;;), wielka pomoc
Lucky Luke
Próbuję wiedzieć, że to, co dzieje się w domyślnym woocommerce_get_price_htmlfiltrze $price. Na mojej stronie woocommerce pokazuje zamiast tego 0 $ za darmowe produktyFree!
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>';
   }
}
Pankaj Jha
źródło
5
Nawet jeśli Twój kod może działać (a nie mam powodu sądzić, że tak nie jest), jest to witryna Q / A, a nie repozytorium kodu, więc lepiej dzielić się wiedzą i wiedzą wyjaśniającą kod, zamiast pisać kod bez wyjaśnień ani wbudowanych komentarzy ...
gmazzap
kod wykorzystuje również właściwości obiektu, co nie jest dobre.
Svetoslav Marinov