WooCommerce: come modificare get_price_html


13

Sto cercando di modificare il valore del prezzo per un singolo prodotto.

In single-product/price.phpc'è un modello di chiamata a $product->get_price_html. Come posso modificare quella funzione / metodo per cambiare il modo in cui viene presentato l'HTML?

Al momento anche se elimino tutti i contenuti della funzione che si trova in class-wc-productessa viene ancora miracolosamente visualizzato? Qualcuno sa perché?

Risposte:


17

I file core e plug-in non devono mai essere modificati direttamente, poiché eventuali aggiornamenti potrebbero sovrascrivere le modifiche. Se si osserva il get_price_htmlmetodo WooCommerce nel metodo, sono disponibili numerosi filtri per modificare l'output della funzione.

Vedi add_filterin Codex per maggiori informazioni sull'aggiunta di filtri alle apply_filterschiamate.

Da get_price_htmlin class-wc-product:

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

Quindi per aggiungere il tuo filtro:

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 );
}

Grazie per la risposta, a proposito perché quando elimino il contenuto della funzione principale restituisce comunque l'output normalmente
Lucky Luke,

1
Quindi diciamo che se c'è stata una vendita attiva e mi restituisce <del>£2</del><ins>£1</ins>, come posso cambiarla Was:<del>£2</del> Now:<ins>£1</ins>con un filtro?
Lucky Luke,

non sono sicuro, non troppo familiare con WooCommerce, forse un'altra classe lo estende. vedi modifica sopra per la tua seconda domanda.
Milo,

Brill,;), grande aiuto
Lucky Luke,

Sto cercando di sapere che cosa sta succedendo nel woocommerce_get_price_htmlfiltro predefinito per $price. Nel mio sito, il woocommerce mostra invece 0 $ per prodotti gratuitiFree!
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
Anche se il tuo codice può funzionare (e non ho motivo di pensare che non lo sia) questo è un sito di Q / A, non un repository di codice, quindi è meglio condividere le competenze e le conoscenze che spiegano il tuo codice, invece di scrivere semplicemente un codice senza spiegazioni né commenti in linea ...
gmazzap

il codice usa anche proprietà dell'oggetto che non è buono.
Svetoslav Marinov,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.