我正在测试插件激活检测,因为我的插件出了问题。我发现了这个问题,但却不明白:
我正在尝试检查插件激活(其他人和我自己)但在WordPress挂钩(例如init
)内
在第一个例子中,我将听取“Hello Dolly”插件激活:
add_action('init', function(){
register_activation_hook('hello.php', function(){
echo 'Hello was activated.';
});
do_action('wordpress_initialized');
});
add_action('wordpress_initialized', function(){
register_activation_hook('hello.php', function(){
echo 'Hello is not allowed.';
die;
});
});
我在做的是:
init
hook hello.php
插件激活说它已被激活。这是一个例子,当我正在收听的插件是另一个插件时,它可以工作。
问题:如果我应用此代码来收听我的插件,它将无效。 (以下内容在myplugin.php
)
add_action('init', function(){
register_activation_hook('myplugin.php', function(){
echo 'myplugin was activated.';
});
do_action('wordpress_initialized');
});
add_action('wordpress_initialized', function(){
register_activation_hook('myplugin.php', function(){
echo 'myplugin is not allowed.';
die;
});
});
发生这种情况是因为,我等到init挂钩注册激活挂钩...如果我在任何挂钩外注册激活挂钩,它将起作用。
但还有更多。
如果我在激活挂钩内触发自定义操作,则可以侦听此操作。
register_activation_hook('myplugin.php', function(){
echo 'myplugin was activated.';
do_action('myplugin_activate');
});
add_action('myplugin_activate', function(){
echo 'myplugin is not allowed.';
die;
});
所以有问题,有解决方案,但我不知道为什么,为什么我可以听其他插件激活,但不能听我自己这样的方式?这是因为激活过程?我在文档中读到了这个,并且重定向发生了,这会如何影响工作流程?
--- --- EDIT
最后一个例子并不完全是一个解决方案。我需要的是在init钩子中为我自己的插件添加一个监听器,如下所示:
add_action('init', function (){
add_action('myplugin_activate', function(){
echo 'myplugin is not allowed.';
die;
});
});