Posted at

WordPressのマルチサイトスイッチにはちゃんとswitch_to_blogを使おう

More than 3 years have passed since last update.

WordPressをマルチサイトで扱っていて、他のネットワークのサイトの投稿を使いたい時ってあると思います。例えば親サイトに子サイトの投稿を全部表示させたいときとか。

そんなとき

# blog_idが2のサイトの投稿を取得する例

$blog_id = 2
switch_to_blog($blog_id);
# ここで投稿を取得したりする処理を書く
get_post($post_id);
restore_current_blog();

とすると思います。これが正しいんですが、興味で

$GLOBALS['blog_id'] = $new_blog_id;

じゃだめなのかなって思ってやってみたらnullを返してきました。

なんでだろうと思って switch_to_blog のメソッド追ってみたら wpdbクラスの set_blog_idを呼んでた。あー。。。マルチサイトそれぞれ違うprefixを変更してるのか。

wpdbの持つメンバ変数$tableのprefixも変更してるみたいだから、wpdbを使う限りアクセスできなくなっちゃうってことか。ってことでちゃんと switch_to_blogを使いましょう。