WooCommerce: Cum să editezi get_price_html

27 ian. 2013, 21:15:35
Vizualizări: 118K
Voturi: 19

Î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?

0
Toate răspunsurile la întrebare 3
6
26

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 );
}
27 ian. 2013 22:06:09
Comentarii

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

Lucky Luke Lucky Luke
27 ian. 2013 22:09:15

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?

Lucky Luke Lucky Luke
27 ian. 2013 22:19:58

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.

Milo Milo
27 ian. 2013 22:27:09

Brillant, ;), mare ajutor

Lucky Luke Lucky Luke
27 ian. 2013 22:33:46

Î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!

SKMohammadi SKMohammadi
7 dec. 2016 11:42:22

În ce fișier se află acea funcție? Nu pot găsi fișierul. Mulțumesc

Si8 Si8
19 iun. 2020 05:03:05
Arată celelalte 1 comentarii
2
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>';
   }
}
3 ian. 2014 16:13:45
Comentarii

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...

gmazzap gmazzap
3 ian. 2014 16:38:31

codul folosește și proprietăți ale obiectelor, ceea ce nu este bine.

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

î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

20 dec. 2020 19:31:52