Как отключить подключенный к сети плагин только для одного сайта?

Я в процессе создания (потенциально) большой многоузловой сети, и я хочу сделать это как можно проще, чтобы добавить и настроить сайты, когда это необходимо. Сейчас я нахожусь в фазе, где я имею дело с плагинами.

С помощью multisite я знаю несколько способов активации плагинов

  • Поместите плагин в /plugins , активируйте его на каждом сайте
  • Поместите плагин в /plugins , используйте «network activate», чтобы активировать его на всех сайтах
  • Поместите плагин в /mu-plugins , автоматически активируется на каждом сайте

Теперь я играл с настройками, и я хочу активировать Akismet на всех сайтах, кроме одного или двух. Я думал, что смогу подключить к сети плагин, а затем отключить его на одном сайте, но я не могу этого сделать – если я использую сетевую активацию, тогда есть только опция «деактивировать сеть», которая деактивирует плагин через все сайты.

Есть ли способ активировать удобные функции активации сети, но при этом все еще есть возможность дезактивировать плагины на основе сайта?

Solutions Collecting From Web of "Как отключить подключенный к сети плагин только для одного сайта?"

Вы можете использовать фильтр site_option_* .

Например, следующее будет отключать akismet в блоге с 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; } с 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; } 

Этот плагин: http://firestats.cc/wiki/WPMUPluginCommander

обходит материал активации сети и делает свое. и позволяет отключить плагин на сайте по базе сайта.

Обновление: похоже, этот плагин нарушает плагин sitewide tags, поэтому будьте осторожны, прежде чем пытаться создать производственную сеть.

Вот что сработало для меня, чтобы отключить плагин для одной конкретной темы при установке с несколькими или несколькими темами. Я добавил эти несколько строк в верхней части файла functions.php в моей теме:

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

Ответы от sorich87 и user33465 не помогли мне с WordPress 4.3. Добавление этого в функцию functions.php темы:

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

Активные плагины хранятся в wp_ [blog_id] _options в поле «active_plugins» и «active_sitewide_plugins» в wp_ [blog_id] _sitemeta. Это сериализованные поля, поэтому не редактируйте их, если вы не знаете, что делаете.

Также взгляните на wp-admin \ plugin.php. Должно быть возможно написать плагин, который будет делать то, что вы хотите, используя функции, объявленные там, например is_plugin_active () и activate_plugin ().

Тем не менее, я предполагаю, что вы владеете PHP, что может и не быть.

Не из коробки в WP 3, но было бы возможно, я думаю, переопределить параметр, используя фильтры option_ *.

Кроме того, было бы неплохо, если бы вы добавили предложение как запрос функции в core.trac.wordpress.org.

Лучший способ передать все плагины в Multisite Network – «Плагин Commander», который вы можете найти здесь: http://wordpress.org/extend/plugins/plugin-commander/

Мне удалось отключить плагин, но он все еще находился на главной панели сайта. Единственное решение, которое я нашел, чтобы полностью удалить его с основного сайта, это проверить на main.php плагина на сайте и отключить его в соответствии с ним:

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