当谈到安装在 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()
这个函数非常有趣,因为它做了两件事:
- 它检查插件是否在您正在使用的网站上本地激活。
- 它检查插件是否是网络激活的。
如果 至少一个条件 为 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()
– 它只会检查来自全局变量。
数据库选项值本身是一个序列化数组,如下所示:
来源:
https://www.wpdaxue.com/check-if-wordpress-plugin-is-active-in-multisite.html