在WordPress插件开发种,经常会遇到A插件依赖B插件才能运行这样的需求,该怎么办呢?其实,WordPress 已经提供了相应的钩子,按需添加即可。

依赖其它插件

假设你的插件依赖另一个插件。然后,在激活插件之前,你需要检查其他插件是否处于活动状态。必须使用WordPress 提供的 register_activation_hook 添加此用于激活插件的条件逻辑。

1
register_activation_hook(__FILE__, 'mypluginname_activation_logic');

其中 ‘mypluginname_activation_logic’ 应该写在你的主插件文件中。在此功能中,必须检查相关插件是否处于活动状态。

1
2
3
4
5
6
7
function mypluginname_activation_logic() {
    //如果依赖插件未激活,禁用本插件
    if (!is_plugin_active('abc/abc.php') )
    {
        deactivate_plugins(plugin_basename(__FILE__));
    }
}

WordPress 提供了一个函数is_plugin_active来检查插件是否处于活动状态。这个函数基本上返回一个真或假的结果。但这里的缺点是必须知道确切的插件文件夹名称和文件名。

更优选的选项是使用class_exists或function_exists函数检查插件创建的类或函数是否存在。例如,WooCommerce 插件创建了类“WooCommerce”。要检查 WooCommerce 插件是否处于活动状态,可以使用:

1
2
3
if (class_exists('Woocommerce')) {
    // your code here
}

但很明显,这里的缺点是,如果在插件更新期间类或函数名称发生变化,则此检查将不起作用。

如果,依赖的插件被禁用,那么也需要同时禁用我们的插件。这时需要 deactivated_plugin 钩子。

1
2
3
4
5
6
7
function detect_plugin_deactivation( $plugin, $network_activation ) {
    if ($plugin=="abc/abc.php")
    {
        deactivate_plugins(plugin_basename(__FILE__));
    }
}
add_action( 'deactivated_plugin', 'detect_plugin_deactivation', 10, 2 );

停用其它插件

这种情况多见于,免费版升级专业版。专业版启用的时候,需要停用免费版。

要停用另一个插件,可以使用 WordPress 提供的功能:deactivate_plugins 函数。必须在适当的钩子上调用deactivate 函数,这取决于插件应该何时被停用。例如,要停用插件ABC,当插件XYZ被激活时,我们必须钩入插件XYZ激活函数,并停用ABC。

1
2
3
4
register_activation_hook(__FILE__, 'XYZ_activation');
function XYZ_activation() {
    deactivate_plugins('ABC/ABC.php');
}

要停用的插件的路径必须在deactivate_plugins函数中指定。

版权声明:部分文章、图片等内容为用户发布或互联网整理而来,仅供学习参考。如有侵犯您的版权,请联系我们,将立刻删除。