WordPressマルチサイトの更新情報を個別表示する

ブログ及びCMSの定番、 WordPressワードプレス) はバージョンが3となってマルチサイト機能を備え、 誰にとってもブログポータルの運営が身近になりました。

マルチサイト機能

ブログポータルを運営しないまでもWordPressでマルチサイト機能を利用する人はかなり増えているようです。 例えば少人数のグループで互いに独立したブログを運営する際などには重宝するでしょう。 無料ブログで個々に独立していたブログを無理矢理一つにまとめるよりは遥かにスマートに運営出来ます。

マルチサイトは工夫次第で様々な形に利用出来ますが その際に欲しくなる機能がブログの更新情報の表示です。 例えば少人数グループでマルチサイトを構成したときメインブログをグループのトップページとすれば 其処に個々に独立したグループメンバーのブログの新着情報を表示したくなろうと言うものです。

スポンサーリンク

WordPressの重要な効能

処でWordPressほど高機能ならばそのような新着表示機能は用意されているような気がするのですが 探し方が悪かったのかどうにも見付けられませんでした。

そんなときも頼もしいのが全世界で利用率No.1のWordPressのワードプレスたる所以です。 なんとなれば悩める問題は大抵の場合が先達が解決を図りWebに公開してくれているからです。 今回もその例に漏れず 神戸のフリーランスWebマスターの日報 さんの2011年8月28日の記事 WordPressマルチサイトネットワークから新着記事を取得するコード(修正版) に答えは用意されていました。

なお、この記事は同年2月18日の記事 マルチサイトネットワーク内の全ブログの新着記事を表示する方法 の修正版で此方の記事には同様の目的のためのプラグイン 鬼太鼓/Oni Daiko も紹介されていましたのでコードを弄るのを敬遠したい方は此方を参考にすると良いでしょう。

機能実現のためのコード2種

参考記事には2種類のコードが用意されており、 前者はWordPressではお馴染みの

/wp-includes/functions.php
の最終行に追加すれば良いでしょう。

後者はテンプレートの表示した場所に記すものです。 以下に引用します。

<?php
$network_posts = get_recentposts_from_network( 'perblog=3' );
if( $network_posts ) :
foreach( (array) $network_posts as $key => $post ) {
  switch_to_blog( $post->blog_id );
  setup_postdata( $post );
  ?>
  <li><a href="<?php the_permalink() ;?>"><?php the_title(); ?></a></li>
  <?php
  restore_current_blog();
}
wp_reset_query();
endif;
?>

赤文字にした3は個々のブログから読み込む数字で 例えばこれを1に書き換えれば各ブログとも最新の新着記事のみを表示するようになる訳です。

なお、手元のWordPressバージョンは2012年8月5日時点で最新の3.4.1の日本語版ですが、 問題なく目的の動きをしてくれました。

マルチサイト機能のブログID

処でこのコードではマルチサイトで作成した個々の総てのブログから新着を取り寄せます。 今回手元の環境で実現したかったのはマルチサイトでもブログを指定して新着記事を表示したいものでした。 実はこれは上のコードにちょっと書き足すだけで実現出来ます。

マルチサイト機能で実現された個々のブログには必ずブログIDが設定されています。 メインブログ、親ブログとも言える最初のもののブログIDは1です。 大凡作成順に1つづつ番号は増えていくようです。 このブログIDは上のコード内では以下の赤文字の部分の様にして指定されています。

switch_to_blog( $post->blog_id );

これを新着表示したいブログと合致するか照合して 合えば表示するように少し書き加えて目的を達成するといった塩梅です。

個々のブログを指定する

例えば親ブログの新着情報だけを表示したいと言った場合は以下のようになるでしょう。

<?php
$network_posts = get_recentposts_from_network( 'perblog=3' );
if( $network_posts ) :
foreach( (array) $network_posts as $key => $post ) {
  switch_to_blog( $post->blog_id );
  setup_postdata( $post );
  if($post->blog_id == 1){
  ?>
  <li><a href="<?php the_permalink() ;?>"><?php the_title(); ?></a></li>
  <?php
  }
  restore_current_blog();
}
wp_reset_query();
endif;
?>

赤文字の部分が付け加えた2行になります。 この数字の1を表示したいブログのものにすれば良い訳ですね。 手元の環境ではこれで上手い具合に表示してくれました。

此処では目の前の目的を達するためだけの遣っ付けで取敢えずと言ったものです。 コードに直接マジックナンバーを書き込んでいますので汎用性も何もありません。 IF文の挿入場所も分かり易さのためHTML表示の前後にしており適切とは言えないでしょう。 その他、指定ブログが存在しない際のエラー表示などは適宜適切に実装下さい。