我有一个add_filter
的函数auth_cookie_expiration
钩此挂钩接受三个参数。然而,我对传递更多参数感兴趣。例如:
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;
}
SO网友:Ynhockey
在使用了一段时间我最初的“解决方案”之后,我又回到了这个问题上,花了更多的时间来弄清楚WordPress的实际功能。
首先需要注意的是,要将参数直接传递给add_filter
功能,唯一合理的方法是我原来的问题中的方法。
然而,通常情况下,通过将参数传递给函数调用,可以更好地解决更大的问题apply_filters
在WordPress或您尝试连接的插件中。
例如apply_filters( \'auth_cookie_expiration\' )
, 在WordPress内部调用wp_set_auth_cookie
, 它接受相同的参数($user_id, $remember
), 这么说吧wp_set_auth_cookie()
(对于任何会话操作都可能执行)允许最终将参数传递给add_filter
. 例如:
add_filter( \'auth_cookie_expiration\', array( \'get_session_expiration\' ), 10, 3 );
// ...
wp_set_auth_cookie( $user_id, $is_remember_me );
// ...
function get_session_expiration( $expiration, $user_id, $remember ) {
// ...
return $some_calculated_expiration;
}
这在我发现的过滤器挂钩可用的多个情况下都有效。