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
を使いましょう。