Comment désactiver un plug-in activé pour le réseau pour un seul site?

18

Je suis en train de configurer un réseau multisite (potentiellement) de grande taille et je souhaite faciliter au maximum la création et la configuration de sites en cas de besoin. Je suis actuellement à la phase où j'ai affaire à des plugins.

Avec multisite, je connais plusieurs façons d'activer des plugins

  • Placez le plugin dans /plugins , activez-le sur chaque site individuellement
  • Placez le plug-in dans /plugins , utilisez "Activer le réseau" pour l'activer sur tous les sites
  • .
  • Placez le plugin dans /mu-plugins , automatiquement activé sur tous les sites

Maintenant, je joue avec les paramètres et je souhaite activer Akismet sur tous les sites sauf , un ou deux. Je pensais pouvoir activer le plug-in en réseau, puis le désactiver sur un seul site, mais je ne peux pas le faire - si j'utilise le service d'activation de réseau, l'option "Désactiver le réseau" n'est disponible que - ce qui désactive le plug-in. tous les sites.

Existe-t-il un moyen d'activer la fonctionnalité pratique du réseau tout en conservant l'avantage de pouvoir désactiver les plug-in site par site?

    
posée nobody 29.10.2010 - 15:11

8 réponses

26

Vous pouvez utiliser le filtre site_option_* .

E.g. Ce qui suit va désactiver Akismet sur le blog avec l'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;
}
    
réponse donnée sorich87 29.10.2010 - 17:35
2

Ce plugin: enlace

contourne l'activation du réseau et effectue le sien. et vous permet de désactiver le plugin site par site.

Mise à jour: il semblerait que ce plug-in casse le plug-in balises sitewide. Soyez donc prudent avant d'essayer un réseau de production.

    
réponse donnée andrea_r 29.10.2010 - 18:05
2

Voici ce qui a fonctionné pour moi pour désactiver un plugin pour un thème particulier sur une installation multisite / multithème. J'ai ajouté ces quelques lignes en haut du fichier functions.php dans mon thème:

/**
 * 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' );
    
réponse donnée user33465 29.05.2013 - 21:26
2

Les réponses de sorich87 et de user33465 ne m'ont pas fonctionné avec Wordpress 4.3. Ajouter ceci à la fonction functions.php de theme:

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' );
    
réponse donnée GDR 22.10.2015 - 13:07
1

Les plugins actifs sont stockés dans wp_ [blog_id] _options dans les champs "active_plugins" et "active_sitewide_plugins" dans wp_ [blog_id] _sitemeta. Ce sont des champs sérialisés, donc ne les éditez que si vous savez ce que vous faites.

Jetez également un coup d’oeil à wp-admin \ plugin.php. Il devrait être possible d'écrire un plugin qui fera ce que vous voulez en utilisant les fonctions déclarées ici, par exemple. is_plugin_active () et activate_plugin ().

Cependant, je présume que vous maîtrisez le langage PHP, ce qui n'est peut-être pas le cas.

    
réponse donnée codecowboy 29.10.2010 - 16:22
0

Pas dans le lot 3, mais il serait possible, je pense, de remplacer l'option à l'aide des filtres option_ *.

Par ailleurs, il serait bon que vous ajoutiez la suggestion en tant que demande de fonctionnalité dans core.trac.wordpress.org.

    
réponse donnée Denis de Bernardy 29.10.2010 - 15:36
0

Le meilleur moyen de gérer tous les plug-ins du réseau multisite est "Plugin Commander". Vous pouvez le trouver ici: enlace

    
réponse donnée user4051 19.03.2011 - 08:45
-1

J'ai réussi à désactiver le plug-in mais il était toujours présent sur le panneau de site principal. La seule solution que j'ai trouvée pour le supprimer complètement du site principal était de vérifier le fichier main.php du plug-in du site et de le désactiver en conséquence:

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

}
    
réponse donnée NetOholik 04.02.2016 - 11:31

Lire d'autres questions sur les étiquettes