根据另一个插件的激活状态停用 WordPress 插件

在进行WordPress插件开发时,尤其是附加组件或高级插件,您必须处理一些用例。例如,一个这样的用例是,在激活高级插件时,您必须停用免费增值插件。或者,如果您的插件依赖于其他插件,您可以在激活插件之前检查这些插件是否处于活动状态。自定义条件逻辑可以添加到您的插件中,在激活和停用挂钩上。

检查依赖插件是否处于活动状态

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

register_activation_hook(__FILE__, 'mypluginname_activation_logic');

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

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

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

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

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

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

从您的插件停用另一个插件

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

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

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

如果依赖插件被停用,则停用您的插件

在基本插件上构建自定义附加组件或扩展时会出现这样的用例。在这种情况下,您可能希望在停用基本插件时停用您的附加组件。为此,您必须挂钩到deactivated_plugin操作,并检查停用的插件是否是基础插件。

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 );

上面指定的所有用例主要是为了停用插件。这样做的原因是,最好不要代表用户激活插件。可能有一些必须使用的插件您希望自动激活,可以创建此类插件并将其放置在 must use 目录中。有关更多信息,您可以参考《什么是 WordPress 必要插件 mu-plugins,如何使用?

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
欢迎关注我们的微信公众号:WPDAXUE

倡萌

一个文科IT宅男,喜欢折腾WordPress和被它折腾 ^_^

暂无评论

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注