WordPressで相互RSSみたいな外部サイトの新着記事一覧を作る

WordPressで他サイトから新着記事一覧をRSSで取得表示します。姉妹サイトや友人同士を繋ぐときにどうぞ。

WordPressで相互RSSみたいな外部サイトの新着記事一覧を作る

WordPressで外部サイトの更新情報をRSS経由で取得表示するPHPコードです。

自分が運営してる姉妹サイトの新着情報を表示させたり、仲間同士で相互RSSを作ることも出来ます。出力パターンをアレンジすると使い勝手が割と変わります。

なお、開発環境は WordPress4.4.2 です。

RSSで表示したい新着記事情報を取得する

まずは新着記事を表示させたい別サイトのRSS feedを取得します。

普通はトップページに続いて /feed/ やら /rss/ やら /xxx.rdf / を付けた感じのアドレスになってると思います。

例 http://www.example.com/feed/

よく判らなかったらサイト内からrssマークrss  を探して正確なパスを確認して下さい。

WordPress系サイトだと絞り込みRSSの取得が可能

ちなみにWordPress系のサイトだとRSSの絞り込み出力が可能です。特定カテゴリや執筆者ごとにお気に入りの者だけ引っ張ってくることも出来ますね。

【 関連記事 】

カテゴリだけじゃない!WordPressのRSS出力を徹底的に活用しようカテゴリだけじゃない!WordPressのRSS出力を徹底的に活用しよう

RSSの出力を絞り込んだりソートする方法

RSSから外部サイトの新着記事を表示する

マルチサイトの新着情報を取得
…ということで、こういうの作ります。

PHPソースコード

まずはPHPから。Codexのサンプルコードを改変しました。

コードをどこに貼るかは好みの問題ですけど、 header.php あたりが妥当ではないでしょうか。

【header.php】
<?php
// SimplePieの読み込み
include_once(ABSPATH . WPINC . '/feed.php');
// feedの取得(複数指定可)
$rss = fetch_feed(array(
  'RSS 1',
  'RSS 2'
));
if (!is_wp_error( $rss ) ) {
  $rss->set_item_limit(3); // 1カ所につきいくつ
  $rss->set_cache_duration(1800);
  $rss->init();
  $maxitems = $rss->get_item_quantity(10); // 全部でいくつ
  $rss_items = $rss->get_items(0, $maxitems);
  date_default_timezone_set('Asia/Tokyo');
}
 
  echo '<ul class="list-icon">';
 
if ($maxitems == 0) { // データがないときの処理
  echo '<li>no articles</li>';
} else {
  foreach ( $rss_items as $item ) {
  echo '<li><a href="'. $item->get_permalink() .'">'. $item->get_title() .'</a><span>'. $item->get_date('Y.n.j') .'</span></li>';
  }
}
  echo '</ul>';
?>

関数リファレンス/fetch feed – WordPress Codex 日本語版

パラメータと解説

変更可能なパラメータは次の通りです。

RSS

最初の方にある fetch_feed() で RSS を読み込みます。配列で複数指定出来るので、必要に応じて増設して下さい。

この関数は WordPress 本体に含まれているオープンソースの SimplePie を使用しています。

$rss->set_cache_duration(1800);

ちなみにキャッシュ機構も用意されており、 set_cache_duration を使わないとデフォルト値の12時間が入るようです。

RSS取得件数

RSSの取得件数に関する設定は2カ所です。「1つのブログからいくつデータを取り出すか」と「全部でいくつのフィードを取り出すか」の二つ。


$rss->set_item_limit(3); // 1カ所につきいくつ
$maxitems = $rss->get_item_quantity(10); // 全部でいくつ

アレンジ例

取得件数の組み合わせで表示の雰囲気が変わります。

複数サイトから新着順に5件表示


$maxitems = $rss->get_item_quantity(5);

まずは複数サイトから新しい順に5件表示する方法。RSSを複数登録していても、特定サイトAが連続して記事を公開するとサイトAの記事ばかりが5件並びます。

複数サイトから新着順に5件ずつ表示


$rss->set_item_limit(5);
$maxitems = $rss->get_item_quantity(50);

ちょっと多めに取得してから1カ所につき5本ずつ並べると、取得した記事から各サイト最大5本ずつ表示されます。2サイト登録してれば計10本。

サイトAとサイトBの記事は日付順に交ぜ書きされます。

おわりに

マルチサイトを作るにあたって姉妹サイトの新着記事を出したかったので調べてみました。

ものとしては希望の機能ができたんですが、結局別の関数を使って作り直したので備忘録としてメモしておきます。

現在実装してる方のソースもそのうち書きます。