web-dev-qa-db-ja.com

1つのサイトだけでネットワーク対応プラグインを無効にするにはどうすればいいですか?

私は(潜在的に)大規模なマルチサイトネットワークの設定を進めています。そして、必要に応じてサイトを追加および設定することをできるだけ簡単にすることを目指しています。私は現在プラグインを扱っている段階にあります。

マルチサイトで私はあなたがプラグインをアクティブにすることができるいくつかの異なる方法を知っています

  • プラグインを/pluginsに入れ、すべてのサイトで個別にアクティブにします
  • プラグインを/pluginsに置き、 'network activate'を使って all sitesで有効にします。
  • すべてのサイトで自動的に有効化されるプラグインを/mu-pluginsに入れる

今、私は設定で遊んでいて、すべてのサイトでAkismetをアクティブにしたいと思います しかし 1つか2つ。プラグインをネットワークで有効にしてから1つのサイトで無効にすることは可能だと思いましたが、できません - ネットワークを有効にする場合は「ネットワークを無効にする」という選択肢しかありません。すべてのサイト.

ネットワークの便利な機能を有効にする方法はありますが、それでもサイトごとにプラグインを無効にできるという便利さがありますか?

21
nobody

フィルタsite_option_*を使うことができます。

例えば。以下はid 2のブログでakismetを無効にします。

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

これは私がマルチサイト/マルチタイムインストールで特定のテーマのプラグインを無効にするのに役立ったものです。私のテーマでは、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' );
3
user33465

このプラグイン: http://firestats.cc/wiki/WPMUPluginCommander

ネットワークアクティベーションのものを迂回して独自の処理を行います。サイトごとにプラグインを無効にできます。

更新:このプラグインはサイト全体のタグプラグインを壊しているように見えるので、本番ネットワークを試す前に注意してください。

3
andrea_r

アクティブなプラグインは、wp_ [blog_id] _sitemetaのフィールド 'active_plugins'および 'active_sitewide_plugins'のwp_ [blog_id] _オプションに格納されています。これらは直列化されたフィールドなので、自分がしていることが分からない限り編集しないでください。

Wp-admin\plugin.phpも見てください。そこに宣言されている関数を使ってあなたがやりたいことをするプラグインを書くことは可能なはずです。 is_plugin_active()およびactivate_plugin()。

しかし、私はあなたがPHPに熟達していることを前提としていますが、そうではないかもしれません。

2
codecowboy

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

WP 3にそのまま入っているわけではありませんが、option_ *フィルターを使用してオプションをオーバーライドすることは可能です。

また、core.trac.wordpress.orgの機能要求として提案を追加した方がいいでしょう。

0

マルチサイトネットワークのすべてのプラグインを処理するより良い方法は、「プラグインコマンダー」です。 http://wordpress.org/extend/plugins/plugin-commander/

0
user4051