admin管理员组文章数量:1394391
Okay, so I have a plugin on my site that triggers a do_action().
In a second plugin, my custom plugin, I hook into this action and end up calling a do_action() for another custom action of my own. This second action is never firing, but...I can't see why the code doesn't "see" it?
Here is a simple example:
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' );
}
Output as it is now:
print from action1 print from action2
What it SHOULD be…because myAction1() calls do_action for myAction2():
print from action1 print from action2 print from action2
For some reason, action1 cannot “see” action2 as if it doesn’t exist. But, I don’t know how to make it exist any more than it does?
Bonus points, adding has_action( ‘my_action2‘ );
under the line commented up above produces 1 when the add_action() exists. If I comment it out, it is 0. So it KNOWS the action/hook is there, it’s just not firing?
Okay, so I have a plugin on my site that triggers a do_action().
In a second plugin, my custom plugin, I hook into this action and end up calling a do_action() for another custom action of my own. This second action is never firing, but...I can't see why the code doesn't "see" it?
Here is a simple example:
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' );
}
Output as it is now:
print from action1 print from action2
What it SHOULD be…because myAction1() calls do_action for myAction2():
print from action1 print from action2 print from action2
For some reason, action1 cannot “see” action2 as if it doesn’t exist. But, I don’t know how to make it exist any more than it does?
Bonus points, adding has_action( ‘my_action2‘ );
under the line commented up above produces 1 when the add_action() exists. If I comment it out, it is 0. So it KNOWS the action/hook is there, it’s just not firing?
- Mirrored WordPress Support Thread – Howdy_McGee ♦ Commented Mar 26, 2020 at 21:01
1 Answer
Reset to default 0I've taken you example and reduced it to this functioning test case:
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();
When this code runs, the output is exactly what you would expect:
My action 1My action 2My action 2
So whatever issue there is with your plugin is specific to the actual implementation in your plugin and the other plugin. Firing actions the way you've described works fine, as I've demonstrated.
本文标签: WP action is not triggering a doaction() call within
版权声明:本文标题:WP action is not triggering a do_action() call within? 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1744631324a2616557.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论