web-dev-qa-db-ja.com

追加のパラメータをadd_filterのCallableに渡す

私はadd_filterフックのためのauth_cookie_expiration関数を持っています。このフックは3つのパラメータを受け取ります。しかし、私はそれにもっと多くのパラメータを渡すのが面白いです。例えば:

add_filter( 'auth_cookie_expiration', 'get_expiration', 10, 5 );

これはapply_filterで可能ですが、add_filter関数は一度呼び出されるので、エラーになります。

PHP Fatal error:  Uncaught ArgumentCountError: Too few arguments to function get_expiration(), 3 passed in ... and exactly 5 expected

私はクロージャを使ってこれを回避しました、しかしこれはこれをするために完全にばかげた方法のように思えます:

add_filter( 'auth_cookie_expiration', function() use ($param1, $param2) { return get_expiration(null, null, null, $param1, $param2); } , 10, 3 );

追加のパラメータを受け入れるようにするための適切で、より洗練された方法はありますか? add_filterがどのように機能するのか誤解していますか?

例として、get_expirationが次のようになっているとします。

function get_expiration( $length, $user_id, $remember, $param1, $param2 )
{
    return $param1 + $param2;
}
4
Ynhockey

add_filterの2番目のパラメーターは、受け入れられる引数の関数であり、戻り値ではありません。

これは、既存の配列$argsを変更するためにカスタム配列$filter_argsを渡す方法の例です。

add_filter( 'woocommerce_dropdown_variation_attribute_options_args', function( $filter_args ) use ( $args ) {
        return eswc_var_dropdown_args( $filter_args, $args );
    }
);

function eswc_var_dropdown_args( $filter_args, $args ) {
    $filter_args['show_option_none'] = $args['var_select_text'];
    return $filter_args;
}
1

Add_filterがどのように機能するのか誤解していますか?

はい、そうです。

add_filter()の2番目のパラメータにある名前で指定された関数(別名コールバック関数)、 NEVERANY パラメータを渡します。 apply_filters()によって渡されたパラメータを受け付けます。これらのパラメータの数とその意味はapply_filters()で定義されています。コールバック関数 MUST フック名を過ぎて、少なくとも最初のパラメータを受け取ります。それは MUST 、また、この最初のパラメータの変更された(または変更されていない)値を返します。