WordPress3.0でマルチサイトを展開する場合、親サイトのウィジェットやカスタムメニューをそのまま子サイトでも利用したいシーンはよくあると思います。
結構ハマったのですが、わかればとても簡単な方法で実現できて感動したのでメモです。
最初は、感覚的にwp_nav_menu()やdynamic_sidebar()にはブログIDを引数で指定できるんじゃないか?
といろいろ調べてみたのですがそういう機能はなくて…
(あると便利な気がする)
WordPressでは、関数switch_to_blog()と関数restore_current_blog()でブログを切り替える考え方でした。
(まだ英語のWordpress Codexでもドキュメントは準備中でした)
switch_to_blog(‘blog_id’) とブログのIDを指定します。
restore_current_blog() でブログ切替を終了します。
サンプル
[php]
[/php]
これだけで実現できるってとても簡単ですね。
実際にはこんな使い方したサンプルを書いておきますね。
くれぐれも restore_current_blog() で切替を終了するのをお忘れなく。
サンプル1: 親サイトのウィジェットを、子サイトで参照する
子サイトのテンプレート
[php]
[/php]
サンプル2: 親サイトのカスタムメニューを、子サイトで参照する
子サイトのテンプレートに記述
[php]
‘globalnav’
));
restore_current_blog();
?>
[/php]
こう書いておけば、
親サイトのテンプレートをそのまま子サイトでも利用したい場合には、
子サイト用にテンプレートをほとんど準備しなくてもいいですね。
サンプル3: 子サイトのウィジェットを使う
あんまり利用シーンはないとは思うけど参考までに。
[php]
[/php]
マルチサイトを利用する場合にいろいろ使える2行ですね。
忘れるなよ俺。
参考サイト)
コメント
コメント一覧 (1件)
[…] This post was mentioned on Twitter by Toru Kaneuchi. Toru Kaneuchi said: 昨日ハマったのでブログにメモ書いた。 QT 2行追加するだけでマルチサイトの子サイトで親サイトのウィジェットやカスタムメニュ […]