web-dev-qa-db-ja.com

Wordpress apply_filters()引数がない

Woocommerce Wordpressサイトをカスタマイズしています。

Woocommerce製品クラス(class-wc-product.php)では、get_price関数は次のようにフィルターを適用します。

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

私のfunctions.phpに私は次のようにフィルタを追加したいです。

add_filter('woocommerce_get_price', 'custom_price');

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

これを呼び出すと、次のようなPHP警告が表示されます。

Warning: Missing argument 2 for custom_price()

2番目の引数がないのはなぜですか? $thisはフィルタ呼び出しに送信されませんか?

3
benedict_w

あなたがadd_filter呼び出しでそれを望んでいたことをWordPressに伝えなかったので、それは2番目の引数を欠いています。デフォルトでは、アクションとフィルタは1つの引数のみを取ります。これを試して:

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

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

この警告は、関数custom_price()の2番目の引数の結果です。フィルタは、呼び出し時に1つの変数のみを提供します。これが商品/投稿IDなのか価格なのかを思い出せません。コードドキュメントはそれが文字列を返すことを示しているので、私はそれが価格だと思います。

うまくいけば、 http://wcdocs.woothemes.com/apidocs/index.html にドキュメントがあります。

この時点で製品が必要な場合は、使用する必要があります。

function custom_price( $price ) {

    global $product;

}

それ以外のすべてが失敗した場合は、単に$ priceをエコーし​​て、それが製品IDなのか価格なのかを判断できるかどうかを確認します。その後、それに応じてコードを調整してください。

1
Steve