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.
/plugins
, activez-le individuellement sur chaque site/plugins
, utilisez 'network activate' pour l'activer sur all sites/mu-plugins
, activé automatiquement sur chaque siteMaintenant, 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?
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;
}
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' );
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.
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.
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' );
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.
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/