マルチサイト状態では、サイト毎個別に有効化できない
マルチサイト機能を使うと、メインサイト(blog_id:1)のプラグインを、個別に有効化できない!
子サイトは、全てちゃんと、サイトごとにプラグインが有効になる。
サブディレクトリタイプでもマルチドメインタイプでも同じ状態。
どうしてこうなるのかと、とりあえずの対応について、書いておきます。
個別でプラグインを『有効化できない』ではなく『有効と認識しない』!
マルチサイト状態でプラグインは、
- 全サイトに適用する『サイトネットワークで有効化』
- サイト毎に個別に適用する通常の『有効化』
がある。
大概サイトネットワークで有効化できるのだが、たまに『個別に適応』しないといけないプラグインがある。
そこで気づいたのだが、メインサイト(blog_id:1)でのみプラグインを有効化しても有効にならない状態だった。
認識しない状態について
- 他の子サイトは、全てキチンと有効化になる。
- サブディレクトリタイプでもマルチドメインタイプでも同じ状態。
- マルチサイト機能を使うためのプラグインを、全部切ってみても状態が変わることはない。
プラグインの情報が入っているDBテーブル『wp_options』のoption_name=『active_plugins』。
確認してみたところ、ちゃんと有効化させたプラグイン情報が入っていた。
なのに、関数から取得しようとすると、空が返ってくる。
個別で有効プラグイン情報は『get_option( 'active_plugins', array() )』という関数で、ネットワークでの有効プラグイン情報は『get_site_option('active_sitewide_plugins')』。
因みに個別は空、ネットワークはちゃんと値が返ってくる。
『wp-includes/option.php』の『get_option()』が怪しい
『wp-includes/option.php』の『get_option()』内にて
$notoptions = wp_cache_get( 'notoptions', 'options' ); if ( isset( $notoptions[ $option ] ) ) {
で『active_plugins』がある認定されるんだけど
return apply_filters( "default_option_{$option}", $default, $option, $passed_default
で返ってくる値が空。
apply_filtersはadd_filterを呼び出すための関数。
『$value』を返した結果、空。
blog_id:1の場合だけ空。empty。悲しい。
『add_filter( "default_option_active_plugins"』はを登録してないのは何でなん?
『register_setting()』してる? よね? だから1以外は出来てるもんね! ん?
メモ程度に書くのだが、『WordPressプラグインのマルチサイト有効化の判定 | 日常の生活と仕事を雑記するコーダーのブログ | CattleMute』とにらめっこして、できそうな気もした。
のだけど、色々忙しくて(言い訳)、なんだかんだ気がつけば2週間くらい戦っていた。
なので、もう諦めて、手っ取り早い解決方法で解決することに…
てっとり早く突貫で解決する方法
先程記載したのね『apply_filters』部分を通り過ぎると、自分が期待したテーブルから欲しい値を返してくれている。
その先は読んでないから、よくは知らんけど。
なので、wp-includes/option.php にて
* @param bool $passed_default Was `get_option()` passed a default value? */ return apply_filters( "default_option_{$option}", $default, $option, $passed_default );
から
* @param bool $passed_default Was `get_option()` passed a default value? */ $temp = apply_filters( "default_option_{$option}", $default, $option, $passed_default ); if(!empty($temp)){ return $temp; unset($temp); }
に変えてしまう。
フィルターで呼び出せるなら、その方が軽そうだし、呼び出せずとも処理は動かした方が良いかな?と思わなくもないから『空の場合はreturnはしないで先に進む』に変更した状態。
けど、フィルターを呼び出すだけなので、まぁ、コメントアウトでも別に問題ないかも知れない。
補足
いやぁ、前はちゃんと個別で有効化に出来たと思ったんだよなぁ…
本体のファイルだから、本体アップデートしたらこの修正消えちゃう
消えちゃうんだよぉ
つか本当にこれは突貫でいわば『(仮)』だから!
やるにしても、自己責任でよろしくです。
今後、WordPressのアップデートでなんかうまいこと直るかも知れないしね!
コメント