文本是《WordPress 多站点(共10篇)》专题的第 10 篇。阅读本文前,建议先阅读前面的文章:
当谈到安装在 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()
– 它只会检查来自全局变量。
数据库选项值本身是一个序列化数组,如下所示:
之后会写一篇关于搬家的帖子吗?想了解一下如何搬整个网络和搬其中一个子站的方法;之前自己尝试搬家,结果发现不管用,修改了 wp_site wp_site_XX 和 wp_options 以及其他1-2个数据表(好像一共就改了4个还是5个的数据表)单中的信息后,还是进不去后台,不知道哪里操作错了。