新規サイトの場合はカスタム投稿タイプなどを用いてブログ専用ページを作ったりしますが、普段仕事などでサイト制作をする際、アメブロを利用して既にブログは書いているし操作も慣れているから、更新一覧だけをWordPressで作成したサイトで表示させたいとか、Facebookに投稿しているものを好みの見栄えで表示させたいという要望が結構あります。
そういった要望が出た際に便利なのがfetch_feed()という関数で、これを使用してアメブロ(PRを除外したもの)・外部のWordPressサイト・Facebookそれぞれのフィードを取得・表示させる方法です。

fetch feed関数の使い方

WordPressで外部のRSSフィードを取得・表示する際にはfetch_feed()という関数を使用します。
下記はCodexにあるサンプルソース(コメントは消してあります)で、こちらを参考にすれば簡単に外部のRSSフィードをWordPressに表示させることができます。

<?php
  include_once( ABSPATH . WPINC . '/feed.php' );

  $rss = fetch_feed( 'http://example.com/rss/feed/goes/here' );  if ( ! is_wp_error( $rss ) ) {
    $maxitems = $rss->get_item_quantity(5);    $rss_items = $rss->get_items(0, $maxitems);
  }
?>

<ul>
  <?php
    if ( $maxitems == 0 ) {
      echo '<li>No items.</li>';
    } else {
      foreach ( $rss_items as $item ) {
        echo '<li>';
        echo '<a href="' . $item->get_permalink() . '" title="Posted' . $item->get_date(' j F Y | g:i a ') . '">' . $item->get_title() . '</a>';
        echo '</li>';
      }
    }
  ?>
</ul>

ハイライト行でhttp://example.com/rss/feed/goes/hereが記述してある部分で使用したいフィードを指定し、get_item_quantity(5)と書かれている部分で表示件数を指定します。
サンプルでは5件表示となっているので、例えばこれを10件表示にしたい場合はget_item_quantity(10)と記述します。

フィードの表示方法に関しても自分が好きなようにマークアップできるので、サンプルではulliを使用して表示していますが、これをdivにしたりclassを追加したりといった変更も可能です。
また、フィードがなかった場合に出力される文言やマークアップもecho '<li>No items.</li>';の箇所で任意ものへ変更できます。

外部のWordPressサイトのフィード表示(日付と抜粋の一部を表示)

ほとんど先ほどのサンプルソースの記述と変わりませんが、下記は出力される内容やフィードがなかった場合の文言を変更したもので、フィードがなかった場合の文言を「新しい記事はありません」に変更し、先ほどタイトルだけが表示されていたフィード内容に日付と文字数を指定した抜粋を追加して表示したものです。

<?php
  include_once( ABSPATH . WPINC . '/feed.php' );

  $wp_feed = fetch_feed( 'http://example.com/feed/' );
  if ( ! is_wp_error( $wp_feed ) ) {
    $maxitems = $wp_feed->get_item_quantity(5);
    $rss_items = $wp_feed->get_items(0, $maxitems);
  }
?>
<ul>
  <?php
    if ( $maxitems == 0 ) {
      echo '<li>新しい記事はありません</li>';
    } else {
      foreach ( $rss_items as $item ) {
        echo '<li>';
        echo '<span class="date">' . item->get_date( 'Y.m.d' ) . '</span><br />';
        echo '<span class="title"><a href="' . $item->get_permalink() . '" target="_blank">' . $item->get_title() . '</a></span><br />';
        echo '<span class="desc">' . mb_substr( strip_tags( $item->get_description() ), 0, 50 ) . ' ... <a href="' . $item->get_permalink() . '" target="_blank">続きを読む</a></span>';        echo '</li>';
      }
    }
  ?>
</ul>

上記コードでは抜粋の先頭から50文字表示するものになります。
表示される文字数を変更したい場合は、ハイライト行内にある50の部分を任意の数値に変更してください。

アメブロのフィード表示

冒頭にも書きましたが、アメブロで既にブログは書いているからそれを一覧表示させたいという要望を結構もらいます。
基本的には同じように記述してあげればアメブロのフィード表示も簡単にできるんですが、アメブロの場合はこのまま使用するとPR記事も一緒に表示されてしまいます。
アメブロのフィードをPR記事を削除した状態で表示させたい場合は下記のように記述します。

<?php
  include_once( ABSPATH . WPINC . '/feed.php' );

  $display_posts_count = 5;
  $get_posts_count = 10;
  $ameblo_feed = fetch_feed( 'http://rssblog.ameba.jp/AmebloID/rss20.xml' );
  $counter = 0;
  if ( ! is_wp_error( $ameblo_feed ) ) {
    $maxitems = $ameblo_feed->get_item_quantity($get_posts_count);
    $feed_items = $ameblo_feed->get_items(0, $maxitems);
  }
?>
<ul>
  <?php
    if ( $feed_items == 0 ) {
      echo '<li>新しい記事はありません</li>';
    } else {
      foreach ( $feed_items as $item ) {
        if ( ! preg_match( '/^PR:/', $item->get_title() ) && $counter < $display_posts_count ) {
          echo '<li>';
          echo '<span>' . $item->get_date( 'Y.m.d' ) . '</span><br />';
          echo '<a href="' . $item->get_permalink() . '" target="_blank">' . $item->get_title() . '</a>';
          echo '</li>';
          $counter++;
        }
      }
    }
  ?>
</ul>

上記コードのハイライト行で「AmebloID」となっている箇所に表示したいアメブロIDを記述してあげれば、PR記事が記事が削除された状態で5件分のフィードが出力されます。
表示する件数を調整したい場合は$display_posts_countの値を変更するのですが、その際は同時に$get_posts_countの値も変更する必要があります。

この部分が何をしているかを簡単に説明すると、例えば単純に5件分のフィードを表示させようとした時、その中にPR記事が2件あった場合はPR記事が削除されるので、5件分の指定をしたはずが3件分しか表示されません。
そこで、予め$get_posts_countで少し多めの件数を取得し、実際に表示したい$display_posts_countの値を超えた時点でループを抜けると記述することで、PR記事が削除されても意図した件数が表示されるようにしています。

この方法は以下で紹介されていました。

複数のアメブロのフィード表示

企業や店舗のブログとなると、ひとつのブログを複数名で更新していくという場合も多いですが、中には社長と社員を分けていたり、スタッフが各自でひとつずつブログを持っているという場合もあります。
今までのサンプルでは基本的にひとつのフィードを取得して出力するというものでしたが、array()を用いて配列にすれば複数のフィードを同時に取得することができ、それらをひとつにまとめて時系列に並べて表示させることができます。

下記は3つのアメブロのフィードを取得し、出力内容は日付と記事タイトル以外にどのブログの更新なのかをわかりやすくするためにブログタイトルも表示させるようにしたものです。 また、先ほどと同じくPR記事を削除して表示するようになっているので、表示させたい件数を指定する$display_posts_countの値よりも少し多めに設定した値を$get_posts_countに指定してください。

<?php
  include_once( ABSPATH . WPINC . '/feed.php' );

  $display_posts_count = 20;
  $get_posts_count = 40;
  $ameblo_feed = fetch_feed( array(
    'http://rssblog.ameba.jp/AmebloID/rss20.xml', // feed1
    'http://rssblog.ameba.jp/AmebloID/rss20.xml', // feed2
    'http://rssblog.ameba.jp/AmebloID/rss20.xml'  // feed3
  ));

  $counter = 0;
  if ( ! is_wp_error( $ameblo_feed ) ) {
    $maxitems = $ameblo_feed->get_item_quantity($get_posts_count);
    $feed_items = $ameblo_feed->get_items(0, $maxitems);
  }
?>
<ul>
  <?php
    if ( $feed_items == 0 ) {
      echo '<li>新しい記事はありません</li>';
    } else {
      foreach ( $feed_items as $item ) {
        if ( ! preg_match( '/^PR:/', $item->get_title() ) && $counter < $display_posts_count ) {
          echo '<li>';
          echo '<span class="date">' . $item->get_date( 'Y.m.d' ) . '</span><br />';
          echo '<span class="title">【' . $item->get_feed()->get_title() . '】</span><br />';
          echo '<a href="' . $item->get_permalink() . '" target="_blank">' . $item->get_title() . '</a>';
          echo '</li>';
          $counter++;
        }
      }
    }
  ?>
</ul>

Facebookのフィード表示

ブログは書いていないけどFacebookは頻繁に更新しているから、その更新一覧をサイトに表示させたいという場合もfetch_feed()を使えば簡単に実装することができます。
Like Box使えばいいじゃんって感じですが、見栄えや表示される内容を自分好みにしたい場合などに...。

Facebookのフィードを表示したい時は下記のように記述し、FacebookIDとなっている箇所に表示させたいFacebookのIDを記述してください。
FacebookIDがわからない場合は、Graph API Explorerで簡単に確認できます。

<?php
  include_once( ABSPATH . WPINC . '/feed.php' );

  $fb_feed = fetch_feed( 'http://www.facebook.com/feeds/page.php?format=rss20&id=FacebookID' );
  if ( ! is_wp_error( $fb_feed ) ) {
    $maxitems = $fb_feed->get_item_quantity(5);
    $rss_items = $fb_feed->get_items(0, $maxitems);
  }
?>
<ul>
  <?php
    if ($maxitems == 0) {
      echo '<li>新しい記事はありません</li>';
    } else {
      foreach ( $rss_items as $item ) {
        echo '<li>';
        echo '<span>' . $item->get_date( 'Y.m.d' ) . '</span><br />';
        echo '<a href="' . $item->get_permalink() . '" target="_blank">' . $item->get_title() . '</a>';
        echo '</li>';
      }
    }
  ?>
</ul>