Wie kann ich ein netzwerkfähiges Plugin für nur eine Site deaktivieren?

Ich bin gerade dabei, ein (potenziell) großes Netzwerk mit mehreren Standorten einzurichten, und ich möchte jetzt so einfach wie möglich Websites hinzufügen und konfigurieren, wenn sie benötigt werden. Ich bin gerade in der Phase, in der es um Plugins geht.

Bei Multisite sind mir verschiedene Möglichkeiten bekannt, Plugins zu aktivieren

  • Setzen Sie das Plugin in /plugins , aktivieren Sie es auf jeder Seite einzeln
  • Setze das Plugin in /plugins , benutze ‘network activate’, um es auf allen Seiten zu aktivieren
  • Setzen Sie das Plugin in /mu-plugins , automatisch auf jeder Seite aktiviert

Jetzt habe ich mit den Einstellungen gespielt und möchte Akismet auf allen Seiten aktivieren, nur ein oder zwei. Ich dachte, ich wäre in der Lage, das Plugin im Netzwerk zu aktivieren und dann auf einer einzigen Seite zu deaktivieren, aber ich kann das nicht tun – wenn ich Netzwerk aktivieren, dann gibt es nur die Option “Netzwerk deaktivieren” – wodurch das Plugin deaktiviert wird Alle Standorte.

Gibt es eine Möglichkeit, die praktische functionalität des Netzwerks zu aktivieren, aber dennoch die Möglichkeit zu haben, Plug-ins auf einer Site-by-Site-Basis zu deaktivieren?

Solutions Collecting From Web of "Wie kann ich ein netzwerkfähiges Plugin für nur eine Site deaktivieren?"

Sie können den Filter site_option_* .

Das folgende Beispiel deaktiviert akismet im Blog mit der 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; } 

Dieses Plugin: http://firestats.cc/wiki/WPMUPluginCommander

Umgeht das Netzwerkaktivierungskram und macht es selbst. und Sie können das Plug-in für jede Site einzeln deaktivieren.

Update: Sieht so aus, als ob dieses Plugin das Sitewide-Tag-Plugin durchbricht. Seien Sie also vorsichtig, bevor Sie ein Produktionsnetzwerk ausprobieren.

Hier ist, was für mich funktionierte, um ein Plugin für ein bestimmtes Thema in einer Multisite / Multitheme-Installation zu deaktivieren. Ich habe diese Zeilen am Anfang der functions.php-Datei in meinem Theme hinzugefügt:

 /** * 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' ); 

Antworten von sorich87 und user33465 haben bei WordPress 4.3 nicht funktioniert. Das Hinzufügen zu theme’s functions.php hat funktioniert:

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

Die aktiven Plugins sind in den wp_ [blog_id] _options in den Feldern ‘active_plugins’ und ‘active_sitewide_plugins’ in wp_ [blog_id] _sitemeta gespeichert. Dies sind serialisierte Felder. Bearbeiten Sie sie daher nur, wenn Sie wissen, was Sie tun.

Sehen Sie sich auch wp-admin \ plugin.php an. Es sollte möglich sein, ein Plugin zu schreiben, das mit den dort deklarierten functionen wie zB is_plugin_active () und activate_plugin () funktioniert.

Ich gehe jedoch davon aus, dass Sie PHP beherrschen, was nicht der Fall ist.

Nicht standardmäßig in WP 3, aber ich denke, dass es möglich ist, die Option mit den Filtern option_ * zu überschreiben.

Außerdem wäre es nett, wenn Sie den Vorschlag als Feature-Anforderung in core.trac.wordpress.org hinzufügen würden.

Der bessere Weg, um alle Plugins im Multisite Network zu hantieren, ist der “Plugin Commander”, den Sie hier finden: http://wordpress.org/extend/plugins/plugin-commander/

Ich habe es geschafft, das Plugin zu deaktivieren, aber es war immer noch im Hauptfenster der Seite. Die einzige Lösung, die ich gefunden habe, um es vollständig von der Hauptseite zu entfernen, war, die main.php des Plugins auf der Site zu überprüfen und sie entsprechend zu deaktivieren:

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