Como desabilitar um plugin habilitado para rede para apenas um site?

18

Estou no processo de configuração de uma rede multisite (potencialmente) de grande porte, e estou procurando facilitar o máximo possível adicionar e configurar sites quando necessário. Atualmente estou na fase em que estou lidando com plugins.

Com o multisite, estou ciente de várias maneiras diferentes de ativar plugins

  • Coloque o plug-in em /plugins , ative-o em todos os sites invidualmente
  • Coloque o plug-in em /plugins , use 'network activate' para ativá-lo em todos sites
  • Coloque o plug-in em /mu-plugins , ativado automaticamente em todos os sites

Agora, estou jogando com as configurações e quero ativar o Akismet em todos os sites , mas um ou dois. Pensei que seria possível ativar o plug-in na rede e desativá-lo em um único site, mas não consigo fazer isso - se eu uso o network activate, há apenas a opção 'desativar a rede' - que desativa o plug-in todos os sites.

Existe uma maneira de ativar a funcionalidade prática da rede, mas ainda assim ter a conveniência de poder desativar os plug-ins em cada site?

    
por nobody 29.10.2010 / 15:11

8 respostas

26

Você pode usar o filtro site_option_* .

Por exemplo o seguinte irá desativar o akismet no blog com id 2.

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;
}
    
por sorich87 29.10.2010 / 17:35
2

Este plugin: enlace

ignora o material de ativação de rede e faz o seu próprio. e permite desativar o plug-in em um site por site.

Atualização: parece que esse plug-in quebra o plug-in de tags do site, portanto, tome cuidado antes de experimentar uma rede de produção.

    
por andrea_r 29.10.2010 / 18:05
2

Aqui está o que funcionou para mim desativar um plug-in para um determinado tema em uma instalação multisite / multitheme. Eu adicionei essas poucas linhas no topo do arquivo functions.php no meu tema:

/**
 * 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' );
    
por user33465 29.05.2013 / 21:26
2

Respostas de sorich87 e user33465 não funcionaram para mim com o Wordpress 4.3. Adicionando isto ao functions.php do tema funcionou:

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' );
    
por GDR 22.10.2015 / 13:07
1

Os plug-ins ativos são armazenados nas opções wp_ [blog_id] no campo 'active_plugins' e 'active_sitewide_plugins' em wp_ [blog_id] _sitemeta. Estes são campos serializados, portanto, não os edite, a menos que você saiba o que está fazendo.

Veja também o wp-admin \ plugin.php. Deve ser possível escrever um plugin que faça o que você deseja usando as funções declaradas lá, por ex. is_plugin_active () e activate_plugin ().

No entanto, estou supondo que você é proficiente em PHP, o que pode não ser o caso.

    
por codecowboy 29.10.2010 / 16:22
0

Não pronto para uso no WP 3, mas seria possível, eu acho, substituir a opção usando os filtros option_ *.

Além disso, seria bom adicionar a sugestão como uma solicitação de recurso em core.trac.wordpress.org.

    
por Denis de Bernardy 29.10.2010 / 15:36
0

A melhor maneira de administrar todos os plugins da Multisite Network é "Plugin Commander" que você pode encontrar aqui: enlace

    
por user4051 19.03.2011 / 08:45
-1

Consegui desativar o plug-in, mas ele ainda estava no painel do site principal. A única solução que encontrei para removê-lo completamente do site principal foi verificar no main.php do plugin o site e desativá-lo de acordo com ele:

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

}
    
por NetOholik 04.02.2016 / 11:31

Tags