• このエントリーをはてなブックマークに追加

子サイト(各ブログ)の一覧を表示する

複数のサイトの情報を自動的に表示させるときにはループ処理の中に切り替えの処理を入れてしまえば一括で処理できる。

<?php
$blog_list = get_blog_list( 0, 'all' );
foreach ( $blog_list as $blog ) {
?>
<pre>
<?php
print_r($blog);
?>
<pre>
<?php
}
?>

ループで表示する1サイト分の例。下記のような4つの情報[blog_id][domain][path][postcount]が取得(表示)できる。ただ、上記関数で取得できる値は上記4つだけ。

Array (
[blog_id] => 5
[domain] => web.example.net
[path] => /
[postcount] => 532
)

このままサイトに表示するにはいまいちなので、せめてリンクが自動的に表示されて行き来できるようにしたいところ。以下のようにします。

すべての子サイトをループ処理でシンプルに表示

<?php
$blog_list = get_blog_list( 0, 'all' );
$blog_list_r = array_reverse( $blog_list );
?>
<ul>
<?php
foreach ( $blog_list_r as $blog ) {
// ブログを切り替える
switch_to_blog( $blog[blog_id] );
?>
<li><a href="<?php echo home_url('/'); ?>"><?php echo bloginfo('name'); ?></a></li>
<?php
// ブログを元に戻す
restore_current_blog();
?>
<?php
}
?>
</ul>

<pre>で表示したときに気づいた人もいるかもしれませんが、ブログは新しい順に取得されるので、ID=1から表示させるためには、逆にひっくり返す必要があります。

1つずつサイトを指定する

1サイトずつ切り替えるときには、このようにサイトの番号を指定して切り替える。切り替えたら、そのサイトは一時的に1のサイトになるため、表示されるループ内のタイトルなどは子サイトの1番のものが表示。

switch_to_blog( 1 );

もとに戻す。

<?php
// ブログを元に戻す
restore_current_blog();
?>

もとに戻すときには、restore_current_blog();。これをしておかないと、本来そのサイトで表示されるべき情報が切り替えたままの情報になってしまうために、表示できなくなってしまう。