私は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;
}
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;
}
Add_filterがどのように機能するのか誤解していますか?
はい、そうです。
add_filter()
の2番目のパラメータにある名前で指定された関数(別名コールバック関数)、 NEVER は ANY パラメータを渡します。 apply_filters()
によって渡されたパラメータを受け付けます。これらのパラメータの数とその意味はapply_filters()
で定義されています。コールバック関数 MUST フック名を過ぎて、少なくとも最初のパラメータを受け取ります。それは MUST 、また、この最初のパラメータの変更された(または変更されていない)値を返します。