WooCommerce: comment modifier le get_price_html


13

J'essaie de modifier la valeur du prix d'un seul produit.

Il single-product/price.phpy a un appel de modèle à $product->get_price_html. Comment puis-je modifier cette fonction / méthode pour changer la façon dont le HTML est présenté?

À l'heure actuelle, même si je supprime tout le contenu de la fonction qui s'y trouve class-wc-products'affiche toujours miraculeusement? Quelqu'un sait pourquoi?

Réponses:


17

Les fichiers de base et de plug-in ne doivent jamais être modifiés directement, car toute mise à jour pourrait remplacer vos modifications. Si vous regardez dans la source WooCommerce à la get_price_htmlméthode, il existe un certain nombre de filtres disponibles pour modifier la sortie de la fonction.

Voir add_filterdans Codex pour plus d'informations sur l'ajout de filtres aux apply_filtersappels.

De get_price_htmlà class-wc-product:

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

Donc, pour ajouter votre propre filtre:

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

Merci pour la réponse, d'ailleurs pourquoi quand je supprime le contenu de la fonction principale, il retourne toujours la sortie normalement
Lucky Luke

1
Disons donc s'il y a eu une vente et que cela me revient <del>£2</del><ins>£1</ins>, comment puis-je le changer Was:<del>£2</del> Now:<ins>£1</ins>avec un filtre?
Lucky Luke

pas sûr, pas trop familier avec WooCommerce, peut-être qu'une autre classe l'étend. voir la modification ci-dessus pour votre deuxième question.
Milo

Brill
Lucky Luke

J'essaie de savoir ce qui se passe dans le woocommerce_get_price_htmlfiltre par défaut $price. Sur mon site, woocommerce affiche 0 $ pour les produits gratuits à la placeFree!
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
Même si votre code peut fonctionner (et je n'ai aucune raison de penser que ce n'est pas le cas), il s'agit d'un site Q / A, pas d'un référentiel de code, il est donc préférable de partager l'expertise et les connaissances expliquant votre code, au lieu de simplement écrire du code sans explication ni commentaires en ligne ...
gmazzap

le code utilise également des propriétés d'objet qui ne sont pas bonnes.
Svetoslav Marinov
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.