如何仅为一个站点禁用启用网络的插件?

时间:2010-10-29 作者:nobody

我正在建立一个(可能的)大型多站点网络,我希望现在可以尽可能方便地在需要时添加和配置站点。我目前正处于处理插件的阶段。

使用multisite,我知道有几种不同的方法可以激活插件

将插件放入/plugins, 在每个站点上以独立方式激活该插件/plugins, 使用“网络激活”将其激活all 站点将插件放入/mu-plugins, 在每个站点上自动激活现在,我一直在玩设置,我想在所有站点上激活Akismetbut 一个或两个。我原以为我可以通过网络激活插件,然后在单个站点上禁用它,但我无法做到这一点-如果我使用网络激活,那么只有“网络停用”选项,这将停用所有站点上的插件。

有没有一种方法可以让网络激活的便捷功能,但仍然可以方便地逐个站点停用插件?

7 个回复
最合适的回答,由SO网友:sorich87 整理而成

您可以使用过滤器site_option_*.

E、 g.以下内容将禁用id为2的博客上的akismet。

add_filter(\'site_option_active_sitewide_plugins\', \'modify_sitewide_plugins\');

function modify_sitewide_plugins($value) {
    global $current_blog;

    if( $current_blog->blog_id == 2 ) {
        unset($value[\'akismet/akismet.php\']);
    }

    return $value;
}

SO网友:andrea_r

此插件:http://firestats.cc/wiki/WPMUPluginCommander

绕过网络激活的东西,自己做。并允许您逐个站点禁用插件。

更新:看起来这个插件破坏了站点范围的标签插件,所以在尝试生产网络之前要小心。

SO网友:user33465

以下是我在多站点/多主题安装中禁用一个特定主题插件的方法。我在函数的顶部添加了这几行。我的主题中的php文件:

/**
 * Disable fancybox plugin for this theme, it breaks javascript
 */
function deactivate_plugin_conditional() {
    if ( is_plugin_active(\'fancybox-for-wordpress/fancybox.php\') ) {
        deactivate_plugins(\'fancybox-for-wordpress/fancybox.php\');
    }
}
add_action( \'muplugins_loaded\', \'deactivate_plugin_conditional\' );

SO网友:codecowboy

活动插件存储在wp\\u[博客id]\\u sitemeta中“活动插件”和“活动站点范围插件”字段中的wp\\u[博客id]\\u选项中。这些是序列化字段,因此除非您知道自己在做什么,否则不要编辑它们。

还可以查看wp admin\\插件。php。应该可以编写一个插件,使用其中声明的函数来执行您想要的操作,例如is\\u plugin\\u active()和activate\\u plugin()。

然而,我假设您精通PHP,但事实可能并非如此。

SO网友:GDR

sorich87和user33465的答案在Wordpress 4.3中不适用。将此添加到主题的函数中。php工作:

function deactivate_plugin_conditional() {
    $deactivated_plugin_name = \'lazy-load/lazy-load.php\';
    deactivate_plugins($deactivated_plugin_name, false, true);
}
add_action( \'init\', \'deactivate_plugin_conditional\' );

SO网友:Denis de Bernardy

在WP 3中不是现成的,但我认为可以使用option\\u*过滤器覆盖该选项。

此外,如果您将建议作为功能请求添加到core中,那也太好了。trac公司。wordpress。组织。

SO网友:NetOholik

我设法禁用了插件,但它仍然在主网站面板上。我发现从主站点完全删除它的唯一解决方案是检查主站点。插件的php访问站点并根据其禁用:

global $current_blog;

// Only available to B
if( $current_blog->blog_id == 2 ) {


    define( \'AB_PATH\', __DIR__ );

    include_once \'includes.php\';

    //  plugin loaded stuff

    AB_Plugin::registerHooks();

    is_admin() ? new AB_Backend() : new AB_Frontend();

}

结束

相关推荐

导入到WordPress MultiSite时禁用HTML过滤

我正在迁移到WordPress多站点实例的许多站点都在帖子中嵌入了视频和iFrame。我宁愿禁用WordPress功能,在导入时去掉嵌入的内容,而不是将每篇文章转换为犹太教式的视频嵌入方式。编辑帖子时禁用剥离是as simple as disabling the kses filter. 不幸的是,我不知道导入帖子需要禁用什么。目前我怀疑wp\\u insert\\u post()方法,但没有缩小过滤器的范围。有什么想法吗?Update: 这是特定于WordPress Multisite的。导入到单个Wo