2

我正在测试插件激活检测,因为我的插件出了点问题。我发现了问题,但不明白:

我正在尝试检查插件激活(其他人和我自己的)但在 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;
    });
});

我正在做的是:

  1. init
  2. 在里面,听hello.php插件激活就说它被激活了。
  3. 在 init 钩子内部,触发一个自定义钩子说 wordpress 已加载
  4. 在外面,我等待另一个自定义钩子,然后听 hello 激活
  5. 激活后,我阻止激活,说不允许。

这是一个示例,当我正在收听的插件是另一个插件时,它可以工作。

问题:如果我应用此代码来监听我的插件,它将无法正常工作。(以下内容在里面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;
    });
});
4

0 回答 0