如何检查 WordPress 插件在多站点网络中是否处于激活状态

当谈到安装在 WordPress 多站点网络上的插件时,其中一些插件可以为整个网络或仅为网络的特定站点激活。

网络激活插件:

WordPress 多站点网络中的网络激活插件
当您“网络激活”插件时,它将自动为您网络中的每个站点激活。是的,这听起来很明显,但以防万一。

相同的插件是针对特定站点激活的:

WordPress 多站点中特定于站点的插件激活

理解它是如何工作的应该不是问题,当我们尝试检查插件是否在代码中是网络或特定于站点激活时,可能会出现问题。

有多种方法可以做到这一点,并且每种方法都有很大不同。

is_plugin_active_for_network() 

如果插件已通过网络激活,则此函数将返回true。因此,例如,如果我们尝试在站点 1 上使用此函数,并且我们的插件在站点 1 上激活,但未在网络范围内激活,则该函数将返回 false

if( is_plugin_active_for_network( 'woocommerce/woocommerce.php' ) ) {
	// WooCommerce is network-activated
} else {
	// WooCommerce isn't network-activated	
}

就是如此简单。

is_plugin_active() 

这个函数非常有趣,因为它做了两件事:

  1. 它检查插件是否在您正在使用的网站上本地激活。
  2. 它检查插件是否是网络激活的。

如果 至少一个条件 为 true

if( is_plugin_active( 'woocommerce/woocommerce.php' ) ) {
	// WooCommerce is either activated on this specific site or network-activated
}

不用担心,此功能在多站点网络之外也可以安全使用。

检查插件是否仅在特定站点上处于激活状态 

WordPress核心中没有这样的功能,所以下面是我为您定制的代码:

if( in_array( $plugin, (array) get_option( 'active_plugins', array() ) ) ) {

}

您还可以检查多站点网络的特定网站,只是不要忘记提供 $blog_id 和 $plugin 变量。

switch_to_blog( $blog_id );

if( in_array( $plugin, (array) get_option( 'active_plugins', array() ) ) ) {

}
	
restore_current_blog();

检查特定插件(在我们的例子中是 WooCommerce)在哪些网站上处于激活状态:

$sites = get_sites();
foreach( $sites as $site ) {
	switch_to_blog( $site->blog_id );
	
	if( in_array( 'woocommerce/woocommerce.php', (array) get_option( 'active_plugins', array() ) ) ) {
		echo "WooCommerce is active on {$site->blogname}";
	}
	
	restore_current_blog();
}

总结 

长话短说,无论您使用 is_plugin_active() 还是 is_plugin_active_for_network() – 在这两种情况下,WordPress 都会检查站点选项中激活的插件:

函数名称 它到底做什么
is_plugin_active_for_network() get_site_option( active_sitewide_plugins' )
is_plugin_active() get_option( 'active_plugins' )get_site_option( 'active_sitewide_plugins' )

不必担心过多的数据库使用,因为这些选项无论如何都会自动加载,并且如果您要多次运行 is_plugin_active() – 它只会检查来自全局变量。

数据库选项值本身是一个序列化数组,如下所示:

WordPress 数据库中的活动插件
从此屏幕截图中,您可以看到网站上激活了几个插件 – WooCommerce、Advanced Cron Manager 和Simple WP Crossposting及其附加组件。

来源:

https://www.wpdaxue.com/check-if-wordpress-plugin-is-active-in-multisite.html

微信公众号
手机浏览(小程序)
0
分享到:
没有账号? 忘记密码?