WooCommerce: So bearbeiten Sie get_price_html

13

Ich versuche, den Preiswert für ein einzelnes Produkt zu bearbeiten.

In single-product/price.phpgibt es einen Vorlagenaufruf an $product->get_price_html. Wie kann ich diese Funktion / Methode bearbeiten, um die Darstellung von HTML zu ändern?

Im Moment wird class-wc-productnoch auf wundersame Weise angezeigt, auch wenn ich den gesamten Inhalt der darin befindlichen Funktion lösche ? Weiß jemand warum?

Lucky Luke
quelle

Antworten:

17

Core- und Plugin-Dateien sollten niemals direkt bearbeitet werden, da Updates Ihre Änderungen überschreiben könnten. Wenn Sie sich die get_price_htmlMethode in der WooCommerce-Quelle ansehen , gibt es eine Reihe von Filtern , mit denen Sie die Ausgabe der Funktion ändern können.

add_filterWeitere Informationen zum Hinzufügen von Filtern zu apply_filtersAnrufen finden Sie im Codex .

Ab get_price_htmlin class-wc-product:

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

So fügen Sie Ihren eigenen Filter hinzu:

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
quelle
Vielen Dank für die Antwort. Übrigens, wenn ich den Inhalt der Hauptfunktion lösche, wird immer noch die normale Ausgabe zurückgegeben
Lucky Luke
1
Sagen wir also, wenn es einen Verkauf gab und er mich zurückbringt <del>£2</del><ins>£1</ins>, wie kann ich das Was:<del>£2</del> Now:<ins>£1</ins>mit einem Filter ändern ?
Lucky Luke
nicht sicher, nicht zu vertraut mit WooCommerce, vielleicht erweitert eine andere Klasse es. Siehe Bearbeiten oben für Ihre zweite Frage.
Milo
Brill,;), große Hilfe
Lucky Luke
Ich versuche zu wissen, was im Standardfilter woocommerce_get_price_htmlfür passiert $price. In meiner Site zeigt woocommerce stattdessen 0 $ für kostenlose ProdukteFree!
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
quelle
5
Auch wenn Ihr Code funktionieren kann (und ich habe keinen Grund zu der Annahme, dass dies nicht der Fall ist), ist dies eine Q / A-Site, kein Code-Repository. Teilen Sie also lieber Fachwissen und Kenntnisse mit, um Ihren Code zu erklären, anstatt nur Code ohne Erklärung zu schreiben noch Inline-Kommentare ...
gmazzap
Der Code verwendet auch Objekteigenschaften, die nicht gut sind.
Svetoslav Marinov