我正在测试插件激活检测,因为我的插件出了点问题。我发现了问题,但不明白:
我正在尝试检查插件激活(其他人和我自己的)但在 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
钩 - 在里面,听
hello.php
插件激活就说它被激活了。 - 在 init 钩子内部,触发一个自定义钩子说 wordpress 已加载
- 在外面,我等待另一个自定义钩子,然后听 hello 激活
- 激活后,我阻止激活,说不允许。
这是一个示例,当我正在收听的插件是另一个插件时,它可以工作。
问题:如果我应用此代码来监听我的插件,它将无法正常工作。(以下内容在里面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;
});
});
发生这种情况是因为,我等到初始化钩子注册激活钩子......如果我在任何钩子之外注册激活钩子,它将起作用。
但还有更多。
如果我在激活钩子中触发了一个自定义动作,这个动作可以被监听。
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;
});
所以有问题,有解决方案,但我不知道为什么,为什么我可以听其他插件激活,但不能这样听我自己的?是因为激活过程?我在文档中读到了这个并且发生了重定向,这如何影响工作流程?
- -编辑 - -
最后一个例子并不完全是一个解决方案。我需要的是在 init 钩子中为我自己的插件添加一个侦听器,如下所示:
add_action('init', function (){
add_action('myplugin_activate', function(){
echo 'myplugin is not allowed.';
die;
});
});