我想在不同的位置使用相同的过滤器挂钩,我只是想确保这样做是可以的(初步测试表明它可以工作,但我不能百分之百确定这样做是可以的)。
因此,add\\u过滤器(\'check\\u powers\',…)仅在一个位置(无关紧要)
function define_user_powers()
{
if ( user_is_powerful() ){
add_filter(\'check_powers\', \'give_super_power\');
}
}
function give_super_power( $powers ){
$powers = true;
return $powers;
}
但apply\\u过滤器(“check\\u Power”)位于多个位置:
function kick_ass()
{
$powers = apply_filters(\'check_powers\', false );
if ( $powers ) {
do_smthng();
}
}
function fly()
{
$powers = apply_filters(\'check_powers\', false );
if ( $powers ) {
do_smthng_else();
}
}
我发现的所有问题都与另一种方式有关(多个add\\u过滤器到同一挂钩)。
SO网友:Jacob Peattie
这在技术上没有什么问题。这是可行的,但确保过滤器在任何地方的使用都是一致的,这一点非常重要,否则您可能会遇到问题。
我的建议是将powers check抽象为一个单独的函数,并在那里使用过滤器。例如,过滤器可能在内部user_is_powerful()
, 然后在需要的任何地方检查该功能:
function user_is_powerful() {
$is_powerful = false;
// Do stuff.
return apply_filters( \'check_powers\', $is_powerful );
}
function kick_ass() {
$powers = user_is_powerful();
if ( $powers ) {
do_smthng();
}
}
function fly() {
$powers = user_is_powerful();
if ( $powers ) {
do_smthng_else();
}
}