具有相同过滤器的多个功能

时间:2019-08-14 作者:Jess_Pinkman

我想在不同的位置使用相同的过滤器挂钩,我只是想确保这样做是可以的(初步测试表明它可以工作,但我不能百分之百确定这样做是可以的)。

因此,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过滤器到同一挂钩)。

1 个回复
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();
    }
}

相关推荐

Multiple category filters

我正在为客户端开发一个事件插件,我需要几个“类别过滤器”。现在我有了一个post类型的参数,我注册了该post类型和分类法,并创建了另一个分类法。在我的category metabox中,我只有第一个分类显示为我可以选择的类别。如果我在我的菜单上创建另一个帖子类型,它会像一个不同的插件菜单一样显示,其中子菜单是我的帖子类型所在的位置,我只想有一个不同的“类别过滤器”,我可以将类别添加到其中,然后在同一个插件中显示为类别元框。所以现在我有一个“Place”的帖子类型和分类法,它显示在我的插件中,通常是一个类