WP操作没有在内触发do_action()调用?

时间:2020-03-26 作者:FTLRalph

好的,我的网站上有一个插件,可以触发do\\u action()。

在第二个插件(我的自定义插件)中,我钩住这个动作,并最终为我自己的另一个自定义动作调用do\\u action()。第二个动作永远不会开火,但是。。。我不明白为什么代码没有“看到”它?

下面是一个简单的示例:

OTHER PLUGIN, the trigger

static function doSomething()
{
  do_action( \'my_action_1\' );
  do_action( \'my_action_2\' );
}

MY PLUGIN

construtor
{
  add_action( \'my_action_2\', myAction2 );
  add_action( \'my_action_1\', myAction1 );
}

myAction1()
{
  print( \'print from action1\' );
  do_action( \'my_action_2\' ); // this is the call that never executes
}

myAction2()
{
  print( \'print from action2\' );
}
现在的输出:

print from action1
print from action2
应该是什么…因为myAction1()调用myAction2()的do\\u action:

print from action1
print from action2
print from action2
出于某种原因,action1无法“看到”action2,就好像它不存在一样。但是,我不知道如何让它存在,就像它存在一样?

奖励积分,添加has_action( ‘my_action2‘ ); 当add\\u action()存在时,在上面注释的行下生成1。如果我将其注释掉,则为0。所以它KNOWS 动作/钩在那里,只是没有开火?

1 个回复
SO网友:Jacob Peattie

我以您为例,将其简化为以下功能测试用例:

class ClassOne {
    public static function do_something() {
        do_action( \'my_action_1\' );
        do_action( \'my_action_2\' );
    }
}

class ClassTwo {
    function __construct() {
        add_action( \'my_action_2\', [ $this, \'my_action_2\' ] );
        add_action( \'my_action_1\', [ $this, \'my_action_1\' ] );
    }

    public function my_action_2() {
        print "My action 2";
    }

    public function my_action_1() {
        print "My action 1";
        do_action( \'my_action_2\' );
    }
}

$class_two = new ClassTwo();

ClassOne::do_something();
当此代码运行时,输出正是您所期望的:

My action 1My action 2My action 2
因此,无论您的插件有什么问题,都是特定于您的插件和其他插件中的实际实现的。正如我所演示的,你描述的射击动作效果很好。

相关推荐

Row actions not showing? Why?

我建造了一个WP_List_Table 显示在我构建的自定义主题页面上。尽管我查看了Internet上关于WP\\U List\\U表格的所有可能信息,但在显示行操作时遇到了一些问题。任何帮助都会很好!class Testimonials_List_Table extends WP_List_Table { function __construct() { parent::__construct( array( \'singular\'=> \'te