问题描述
我试图在激活第一个插件时自动激活第二个插件。
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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。