it-swarm.com.de

Wordpress apply_filters () Argumente fehlen

Ich passe eine Woocommerce Wordpress-Site an.

In der Woocommerce-Produktklasse (class-wc-product.php) wendet die Funktion get_price einen Filter wie folgt an:

function get_price() {
    return apply_filters('woocommerce_get_price', $this->price, $this);
}

In meiner functions.php möchte ich einen Filter wie folgt hinzufügen:

add_filter('woocommerce_get_price', 'custom_price');

function custom_price($price, $product) {
    ...
}

Wenn ich dies aufrufe, erhalte ich die folgende PHP Warnung:

Warning: Missing argument 2 for custom_price()

Warum fehlt das zweite Argument? Wird $this nicht an den Filteraufruf gesendet?

3
benedict_w

Das zweite Argument fehlt, weil Sie WordPress mit Ihrem add_filter-Aufruf nicht mitgeteilt haben, dass Sie es möchten. Standardmäßig erhalten Aktionen und Filter nur ein Argument. Versuche dies:

<?php
add_filter('woocommerce_get_price', 'custom_price', 10, 2);

function custom_price($price, $product) {
    ...
}
13
chrisguitarguy

Die Warnung ist das Ergebnis des zweiten Arguments in Ihrer Funktion custom_price (). Der Filter stellt nur eine Variable für den Aufruf bereit, und ich kann mich nicht erinnern, ob dies die Produkt-/Post-ID oder der Preis ist. Die Codedokumente geben an, dass eine Zeichenfolge zurückgegeben wird, sodass ich davon ausgehen würde, dass es sich um den Preis handelt.

Sie finden die Dokumentation hoffentlich unter http://wcdocs.woothemes.com/apidocs/index.html .

Wenn Sie das Produkt an dieser Stelle benötigen, müssen Sie Folgendes verwenden:

function custom_price( $price ) {

    global $product;

}

Wenn alles andere fehlschlägt, geben Sie einfach $ price ein, um festzustellen, ob es sich um eine Produkt-ID oder einen Preis handelt. Passen Sie dann Ihren Code entsprechend an.

1
Steve