マルチサイト機能でメインサイト(blog_id:1)のpluginが個別で有効にならない

当方マルチサイト機能を使っている。
そこで気づいたのだが、メインサイト(blog_id:1)のプラグインで、個別に有効化しても認識しない!
他の子サイトは、全て認識する。
サブディレクトリタイプでもマルチドメインタイプでも同じ状態。
ちょっと前には出来たと思うのだけど…困った

どうしてこうなるのか調査と、とりあえずの対応について。

個別でプラグインを有効化しても有効だと認識しない!

最近『WordPress Ping Optimizer』というpluginを使い始めたのだが、これはネットワークで有効化しても使えない。
DBに登録する必要があるので『個別に有効化』しないといけないプラグインなのだ。
そこで気づいたのだが、メインサイト(blog_id:1)でのみプラグインを有効化しても有効にならないのだ。

認識しない状態について

  1. 他の子サイトは、全てキチンと有効化になる。
  2. サブディレクトリタイプでもマルチドメインタイプでも同じ状態。
  3. マルチサイト機能を使うためのプラグインを、全部切ってみても状態が変わることはない。

プラグインの情報が入っているDBテーブル『wp_options』のoption_name=『active_plugins』。
確認してみたところ、ちゃんと有効化させたプラグイン情報が入っていた。

なのに、関数から取得しようとすると、空が返ってくる。
個別で有効プラグイン情報は『get_option( 'active_plugins', array() )』という関数で、ネットワークでの有効プラグイン情報は『get_site_option('active_sitewide_plugins')』。
因みに個別は空、ネットワークはちゃんと値が返ってくる。

どんどん処理内部に潜っていって『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』部分を通り過ぎると、自分が期待したテーブルから欲しい値を返してくれるんだよね。
先は読んでないから、よくは知らんけど。
なので

			 * @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のアップデートで変わるかも知れないし…
という対応なので、その内なんか考える。

コメント

タイトルとURLをコピーしました