WooCommerce: Cum să editezi get_price_html
Încerc să editez valoarea prețului pentru un singur produs.
În single-product/price.php
există o apelare de șablon către $product->get_price_html
. Cum pot edita această funcție/metodă pentru a modifica modul în care este prezentat HTML-ul?
În momentul de față, chiar dacă șterg tot conținutul funcției localizate în class-wc-product
, aceasta încă se afișează în mod miraculos? Știe cineva de ce?

Fișierele de bază și cele ale plugin-urilor nu ar trebui niciodată editate direct, deoarece orice actualizare ar putea suprascrie modificările tale. Dacă te uiți în sursa WooCommerce la metoda get_price_html
, există o serie de filtre disponibile pentru a modifica rezultatul funcției.
Vezi add_filter
în Codex pentru mai multe informații despre adăugarea de filtre la apelurile apply_filters
.
Din get_price_html
în class-wc-product
:
return apply_filters('woocommerce_get_price_html', $price, $this);
Deci, pentru a adăuga propriul tău filtru:
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 );
}

Mulțumesc pentru răspuns, apropo de ce când șterg conținutul funcției principale tot returnează rezultatul ca în mod normal

De exemplu, dacă ar fi o reducere și mi-ar returna <del>£2</del><ins>£1</ins>
, cum aș putea schimba asta în Era:<del>£2</del> Acum:<ins>£1</ins>
cu ajutorul unui filtru?

Nu sunt sigur, nu prea sunt familiar cu WooCommerce, poate o altă clasă o extinde. Vezi ediția de mai sus pentru a doua ta întrebare.

Încerc să aflu ce se întâmplă în mod implicit cu filtrul woocommerce_get_price_html
pentru $price
. Pe site-ul meu, WooCommerce afișează 0$ pentru produsele gratuite în loc de Gratis!

function wpa83368_price_html( $price,$product ){
// returnează $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 ) .' Preț magazin </del> | </div><div class="live-colst">'.( ( is_numeric( $to ) ) ? woocommerce_price( $to ) : $to ) .'Prețul nostru</div>';
} else {
$to = $product->price;
return '<div class="live-colst">' . ( ( is_numeric( $to ) ) ? woocommerce_price( $to ) : $to ) . 'Prețul nostru</div>';
}
} else {
return '<div class="live-colst">0 Prețul nostru</div>';
}
}

Chiar dacă codul tău poate funcționa (și nu am niciun motiv să cred că nu funcționează), acesta este un site de întrebări și răspunsuri, nu un depozit de cod, așa că este mai bine să împărtășești expertiza și cunoștințele explicând codul tău, în loc să scrii pur și simplu cod fără explicații sau comentarii în linie...

în fișierul 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">gratuit</div>';
}
$price_html .= '</div>';
return $price_html;
}
în fișierul unde doriți să afișați prețul, de exemplu single-product.php
global $product;
echo h08831n_get_price($product);
de asemenea, puteți elimina wc_price din funcție pentru a elimina formatele HTML implicite ale WooCommerce
