Je personnalise un site Wordpress Woocommerce.
Dans la classe de produits Woocommerce (class-wc-product.php
), la fonction get_price
applique un filtre comme suit:
function get_price() {
return apply_filters('woocommerce_get_price', $this->price, $this);
}
Dans mon functions.php je veux ajouter un filtre comme suit:
add_filter('woocommerce_get_price', 'custom_price');
function custom_price($price, $product) {
...
}
Lorsque j'appelle cela, j'obtiens l'avertissement suivant PHP:
Warning: Missing argument 2 for custom_price()
Pourquoi le second argument manque-t-il? $this
n'est-il pas envoyé à l'appel filtre?
Il manque le deuxième argument car vous n'avez pas dit à WordPress que vous le vouliez avec votre appel add_filter
. Par défaut, les actions et les filtres ne reçoivent qu'un seul argument. Essaye ça:
<?php
add_filter('woocommerce_get_price', 'custom_price', 10, 2);
function custom_price($price, $product) {
...
}
L'avertissement est le résultat du deuxième argument de votre fonction custom_price (). Le filtre fournit une seule variable sur l'appel et je ne me souviens plus s'il s'agit de l'ID de produit/de publication ou du prix. Le code docs indique qu'il renvoie une chaîne, donc je suppose que c'est le prix.
Si tout va bien, vous pouvez trouver la documentation sur http://wcdocs.woothemes.com/apidocs/index.html
Si vous avez besoin du produit à ce stade, vous devrez utiliser:
function custom_price( $price ) {
global $product;
}
Si tout échoue, simplement echo $ price pour voir si vous pouvez dire s'il s'agit d'un ID de produit ou d'un prix. Puis ajustez votre code en conséquence.