web-dev-qa-db-fra.com

Wordpress apply_filters () Arguments manquants

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?

3
benedict_w

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) {
    ...
}
13
chrisguitarguy

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.

1
Steve