web-dev-qa-db-fra.com

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

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 fonction des besoins. Je suis actuellement à la phase où je traite des plugins.

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

  • Mettez le plugin dans /plugins, activez-le individuellement sur chaque site
  • Mettez le plugin dans /plugins, utilisez 'network activate' pour l'activer sur all sites
  • Mettez le plugin dans /mu-plugins, activé automatiquement sur chaque site

Maintenant, je joue avec les paramètres et je veux activer Akismet sur tous les sites mais 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 pour désactiver 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?

21
nobody

Vous pouvez utiliser le filtre site_option_*.

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

Voici ce qui a fonctionné pour moi pour désactiver un plugin pour un thème particulier sur une installation multisite/multitheme. J'ai ajouté ces quelques lignes en haut du fichier functions.php de 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' );
3
user33465

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

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

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

3
andrea_r

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.

Regardez aussi 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 bien PHP, ce qui n'est peut-être pas le cas.

2
codecowboy

Les réponses de sorich87 et de user33465 n'ont pas fonctionné avec Wordpress 4.3. Ajouter ceci à functions.php du thème a fonctionné:

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

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

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

0
Denis de Bernardy

Le meilleur moyen de gérer tous les plugins du réseau multisite est "Plugin Commander", vous pouvez trouver ici: http://wordpress.org/extend/plugins/plugin-commander/

0
user4051