WordPress:外部サイト(アメブロ・外部WordPress・Facebook)のRSSフィードを取得・表示する方法

WordPress:外部サイト(アメブロ・外部WordPress・Facebook)のRSSフィードを取得・表示する方法

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

WordPress:外部サイト(アメブロ・外部WordPress・Facebook)のRSSフィードを取得・表示する方法 目次

  1. fetch feed関数の使い方
  2. 外部のWordPressサイトのフィード表示(日付と抜粋の一部を表示)
  3. アメブロのフィード表示
  4. 複数のアメブロのフィード表示
  5. Facebookのフィード表示

1. 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); 
  endif;
?>

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

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

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

目次へ

2. 外部の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);
  endif;
?>
<ul>
  <?php if ($maxitems == 0) echo '<li>新しい記事はありません</li>';
  else
  foreach ( $rss_items as $item ) : ?>
  <li>
    <span class="date"><?php echo $item->get_date('Y.m.d'); ?></span><br />
    <span class="title"><a href="<?php echo $item->get_permalink(); ?>" target="_blank"><?php echo $item->get_title(); ?></a></span><br />
    <span class="desc"><?php echo mb_substr(strip_tags($item->get_description()), 0, 50); ?> ... <a href='<?php echo $item->get_permalink(); ?>' target="_blank">続きを読む</a></span>
  </li>
  <?php endforeach; ?>
</ul>

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

目次へ

3. アメブロのフィード表示

冒頭にも書きましたが、アメブロで既にブログは書いているからそれを一覧表示させたいという要望を結構もらいます。
基本的には同じように記述してあげればアメブロのフィード表示も簡単にできるんですが、アメブロの場合はこのまま使用すると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);
  endif;
?>
<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 ):
  ?>
  <li>
    <span><?php echo $item->get_date('Y.m.d'); ?></span><br />
    <a href="<?php echo $item->get_permalink(); ?>" target="_blank"><?php echo $item->get_title(); ?></a>
  </li>
  <?php
    $counter++;
    endif;
    endforeach;
  ?>
</ul>

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

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

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

目次へ

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

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

下記は3つのアメブロのフィードを取得し、出力内容は日付と記事タイトル以外に、どのブログの更新なのかをわかりやすくするためにブログタイトルも表示させるようにしたものです。
また、「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);
  endif;
?>
<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 ):
  ?>
  <li>
    <span class="date"><?php echo $item->get_date('Y.m.d'); ?></span><br />
    <span class="title">【<?php echo $item->get_feed()->get_title(); ?>】</span><br />
    <a href="<?php echo $item->get_permalink(); ?>" target="_blank"><?php echo $item->get_title(); ?></a>
  </li>
  <?php
    $counter++;
    endif;
    endforeach;
  ?>
</ul>

目次へ

5. 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);
  endif;
?>
<ul>
  <?php if ($maxitems == 0) echo '<li>新しい記事はありません</li>';
  else
  foreach ( $rss_items as $item ) : ?>
  <li>
    <span><?php echo $item->get_date('Y.m.d'); ?></span><br />
    <a href="<?php echo $item->get_permalink(); ?>" target="_blank"><?php echo $item->get_title(); ?></a>
  </li>
  <?php endforeach; ?>
</ul>

目次へ

Close the search window,
please press close button or esc key.