高级WordPress插件激活检测

时间:2018-01-26 12:04:55

标签: wordpress activation wordpress-hook

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

我正在尝试检查插件激活(其他人和我自己)但在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 hook
  2. 在其中,听取hello.php插件激活说它已被激活。
  3. 在init钩子内部,触发自定义钩子,表示已加载wordpress
  4. 外面,我等待另一个自定义挂钩,然后听取你好激活
  5. 激活后,我会阻止激活,说明不允许这样做。
  6. 这是一个例子,当我正在收听的插件是另一个插件时,它可以工作。

    问题:如果我应用此代码来收听我的插件,它将无效。 (以下内容在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;
        });
    });
    

0 个答案:

没有答案