it-swarm.dev

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

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

Com multisite eu estou ciente de várias maneiras diferentes que você pode ativar plugins

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

Agora, eu tenho jogado 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 fazê-lo - se usar o recurso de ativação da rede, há apenas a opção "desativar a rede" - que desativa o plug-in todos os sites.

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

21
nobody

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;
}
28
sorich87

Aqui está o que funcionou para mim desabilitar um plugin para um tema em particular em uma instalação multisite/multitheme. Eu adicionei estas 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' );
3
user33465

Este plugin: http://firestats.cc/wiki/WPMUPluginCommander

ignora o material de ativação de rede e faz o seu próprio. e permite desabilitar o plug-in em cada 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.

3
andrea_r

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

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

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

2
codecowboy

Respostas de sorich87 e user33465 não funcionou para mim com o Wordpress 4.3. Adicionando isso 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' );
2
GDR

Não fora da caixa em WP 3, mas seria possível, eu acho, substituir a opção usando os filtros option_ *.

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

0
Denis de Bernardy

A melhor maneira de administrar todos os plugins da Multisite Network é "Plugin Commander", você pode encontrar aqui: http://wordpress.org/extend/plugins/plugin-commander/

0
user4051