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の絞り込み出力が可能です。特定カテゴリや執筆者ごとにお気に入りの者だけ引っ張ってくることも出来ますね。
RSSから外部サイトの新着記事を表示する
…ということで、こういうの作ります。
PHPソースコード
まずはPHPから。Codexのサンプルコードを改変しました。
コードをどこに貼るかは好みの問題ですけど、 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の記事は日付順に交ぜ書きされます。
おわりに
マルチサイトを作るにあたって姉妹サイトの新着記事を出したかったので調べてみました。
ものとしては希望の機能ができたんですが、結局別の関数を使って作り直したので備忘録としてメモしておきます。
現在実装してる方のソースもそのうち書きます。
コメントをどうぞ(´ω`*)