WordPressの勉強-08「ネットワーク化した各ブログの情報を取得」

January 6, 2011
wp-switch_main.gif

Wordpress 3.0 から、ネットワーク化すると複数のブログを管理できるマルチサイトの運営が可能になりました。そうなると、追加した各ブログの情報(新着情報やページ情報など)を取得したい場合が増えてきますよね。

Movabletype では「 MultiBlog 」で、複数ブログの情報をテンプレートタグで簡単に取得できたので、Wordpress も何か似たようなタグがあるだろうと調べてみると、WPMUで使用されていた「switch_to_blog 」という関数を利用するとのこと。

それまでは、各ブログの RSS からタイトルやパーマリンクを抜き出して、最新情報に表示させていたけど、表示が重いしリアルタイムに反応してくれなかったので困っていました。これで一気に解決っす。

switch_to_blog() 関数

ポイントは、「 switch_to_blog() 」の引数にサイト(ブログ)のIDを入れ、各ブログに切り替えて情報を取得する。

<?php switch_to_blog(サイトのID) ?> 

サイトの ID は、ダッシュボード内で調べることができます。

サイトID

ダッシュボード内の「サイトID」

処理が終わると、最後に元のブログに戻す記述を忘れないように。

<?php restore_current_blog(); ?>

サンプルコード

【新着情報サンプル】

例えば、子ブログの新着情報を親ブログに表示させる場合なら、こんな感じで記述できます。

<?php
// ブログIDが2の情報を取得する場合
switch_to_blog(2);
?>
<dl>
<?php
// 最新記事の5件を表示
query_posts('showposts=5');
while(have_posts()) : the_post();
?>
<dt><?php the_time('Y年m月d日'); ?></dt> 
<dd><a href="<?php the_permalink() ?>" rel="bookmark"><?php the_title(); ?></a>
(<?php $cat = get_the_category(); $cat = $cat[0]; { echo $cat->cat_name ;} ?>)</dd>
<?php endwhile; ?>

【サイトマップサンプル】

簡単なサイトマップならこんな感じで取得できます。

<?php
echo "<h1>サイトマップ</h1>";
// 各ブログの情報を格納
$blog_list = get_blog_list();
// 各ブログの情報をID順で表示させる
foreach (array_reverse($blog_list) as $blog) {

	// ブログIDを切り替える
	switch_to_blog($blog['blog_id']);
	
	// 各ブログの概要
	echo "<h2>";
	bloginfo('description');
	echo "</h2>\n";
	
	// 各ブログのページリスト
	echo "<ul>\n";
	wp_list_pages('title_li=');
	echo "</ul>\n";
	
	// 元のブログにもどる
	restore_current_blog();
}
?>

「 switch_to_blog 」は、ネットワーク化してマルチサイトを管理する場合、必ず必要となってくる機能だと思います。

参考サイト

switch_to_blog:マルチサイトのポータルを作成する | Goldmine1969 :: BLOG

#WordPress マルチサイトネットワーク内の各ブログから最新の投稿1件を取得し時系列で並べる方法 | umbrella_process blog

STAFF_01 [KYS-LAB]: ページが見つかりません。