WooCommerce: Come modificare il get_price_html

27 gen 2013, 21:15:35
Visualizzazioni: 118K
Voti: 19

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

In single-product/price.php c'è una chiamata al template $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 tutto il contenuto della funzione situata in class-wc-product, viene ancora mostrato miracolosamente. Qualcuno sa perché?

0
Tutte le risposte alla domanda 3
6
26

I file del core e dei plugin non dovrebbero mai essere modificati direttamente, poiché eventuali aggiornamenti potrebbero sovrascrivere le tue modifiche. Se guardi nel codice sorgente di WooCommerce il metodo get_price_html, ci sono diversi filtri disponibili per modificare l'output della funzione.

Vedi add_filter nel Codex per maggiori informazioni sull'aggiunta di filtri alle chiamate apply_filters.

Da get_price_html in 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 'Prezzo originale:' . str_replace( '<ins>', ' Prezzo scontato:<ins>', $price );
}
27 gen 2013 22:06:09
Commenti

Grazie per la risposta, comunque perché quando cancello i contenuti della funzione principale restituisce comunque l'output normalmente

Lucky Luke Lucky Luke
27 gen 2013 22:09:15

Quindi diciamo che se c'era una vendita e mi restituisce <del>£2</del><ins>£1</ins>, come posso cambiarlo in Era:<del>£2</del> Ora:<ins>£1</ins> con un filtro?

Lucky Luke Lucky Luke
27 gen 2013 22:19:58

non sono sicuro, non ho molta familiarità con WooCommerce, forse un'altra classe lo estende. vedi la modifica sopra per la tua seconda domanda.

Milo Milo
27 gen 2013 22:27:09

Brillante, ;), ottimo aiuto

Lucky Luke Lucky Luke
27 gen 2013 22:33:46

Sto cercando di capire cosa succede nel filtro predefinito woocommerce_get_price_html per $price. Nel mio sito, WooCommerce mostra 0$ per i prodotti gratuiti invece di Free!

SKMohammadi SKMohammadi
7 dic 2016 11:42:22

In quale file si trova quella funzione? Non riesco a trovare il file. Grazie

Si8 Si8
19 giu 2020 05:03:05
Mostra i restanti 1 commenti
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 ) .' Prezzo di listino </del>  | </div><div class="live-colst">'.( ( is_numeric( $to ) ) ? woocommerce_price( $to ) : $to ) .'Il nostro prezzo</div>';
      } else {
        $to = $product->price;
        return '<div class="live-colst">' . ( ( is_numeric( $to ) ) ? woocommerce_price( $to ) : $to ) . 'Il nostro prezzo</div>';
      }
   } else {
     return '<div class="live-colst">0 Il nostro prezzo</div>';
   }
}
3 gen 2014 16:13:45
Commenti

Anche se il tuo codice può funzionare (e non ho motivo di pensare che non lo faccia) questo è un sito di domande/risposte, non un repository di codice quindi è meglio condividere competenze e conoscenze spiegando il tuo codice, invece di scrivere semplicemente codice senza spiegazioni né commenti inline...

gmazzap gmazzap
3 gen 2014 16:38:31

il codice utilizza anche proprietà di oggetti che non è una buona pratica.

Svetoslav Marinov Svetoslav Marinov
8 mag 2018 21:50:06
0

nel file 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">gratis</div>';
        }
        $price_html .= '</div>';
        return $price_html;
    }

nel punto in cui vuoi visualizzare il prezzo come in single-product.php

global $product;
echo h08831n_get_price($product);

puoi anche rimuovere wc_price dalla funzione per eliminare i formati HTML predefiniti di WooCommerce

20 dic 2020 19:31:52