问题描述

我试图在激活第一个插件时自动激活第二个插件。

register_activation_hook(__FILE__, 'example_activation' );
function example_activation() {
        include_once(ABSPATH .'/wp-admin/includes/plugin.php');
        activate_plugin('hello.php');
}

它不工作在 register_activation_hook .. 它的工作,如果我直接使用它像:

include_once(ABSPATH .'/wp-admin/includes/plugin.php');
activate_plugin('hello.php');

我该如何解决?感谢帮助

解:

我现在正在使用这个:

// When this plugin activate, activate another plugin too.
register_activation_hook(__FILE__, function(){
    $dependent = 'hello.php';
    if( is_plugin_inactive($dependent) ){
        add_action('update_option_active_plugins', function($dependent){
            /* for some reason, 
            activate_plugin($dependent); 
               is not working */
            activate_plugin('hello.php');
        });
    }
}); 

// When this plugin deactivate, deactivate another plugin too.
register_deactivation_hook(__FILE__, function(){
    $dependent = 'hello.php';
    if( is_plugin_active($dependent) ){
        add_action('update_option_active_plugins', function($dependent){
            deactivate_plugins('hello.php');
        });
    }
}); 

最佳解决方案

有关发生什么的详细说明,请参阅 this post(这是用于禁用 plug-ins,但问题是相同的) 。

简要说明:Plug-ins 通过将其添加到存储在数据库中的活动 pug-ins 数组来激活。当您激活第一个 plug-in 时,WordPress 检索所有当前活动的 plug-ins 的阵列,将 plug-in 添加到它 (但不更新数据库),然后运行安装回调。

此安装回调运行您的代码。

之后 WordPress 更新数据库与上述数组,其中包含第一个但不是第二个 plug-in 。因此,您的第二个 plug-in 似乎未被激活。

解决方案:在上述链接中提到了解决方案是这样的 (未经测试):

//This goes inside Plugin A.
//When A is activated. activate B.
register_activation_hook(__FILE__,'my_plugin_A_activate'); 
function my_plugin_A_activate(){
    $dependent = 'B/B.php';
    if( is_plugin_inactive($dependent) ){
         add_action('update_option_active_plugins', 'my_activate_dependent_B');
    }
}

function my_activate_dependent_B(){
    $dependent = 'B/B.php';
    activate_plugin($dependent);
}

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。