「別サイトの更新情報を、自分のサイトに一覧で表示したい」——コーポレートサイトにブログの新着を載せる、といった場面でよくある要望です。こんなときに使えるのがRSSフィードです。
結論から言うと、WordPressサイトには標準でRSSフィードが用意されており、そのフィードURLをPHPで取得・解析すれば、外部サイト上に更新情報を表示できます。この記事では、RSSの基本から、フィードURLの確認方法、表示用コードまでを解説します。
RSSは「Really Simple Syndication」や「Rich Site Summary」の略で、ニュース記事やブログ記事の更新情報を配信するためのフォーマットです。RSSを利用すると、外部サイトの更新情報を別のサイト上で表示できます。
WordPressサイトであれば、標準でRSSフィードが組み込まれています。フィードURLは、サイトのURLの末尾に/feed/を追加するだけで確認できます。
たとえばサイトのURLがhttps://example.com/なら、RSSフィードURLはhttps://example.com/feed/になります。
表示したい箇所に、次のようなPHPコードを書くことで、外部サイトの更新情報を表示できます。PHPのコードなので、HTMLファイルに書く場合は、あらかじめ拡張子を.phpに変更しておきます。
<ul class="news__list">
<?php
// 取得したいサイトのRSSフィードURL
$url = 'https://example.com/feed/';
$context = stream_context_create(
array(
'ssl' => array(
'verify_peer' => false,
'verify_peer_name' => false,
),
)
);
$getTXT = file_get_contents($url, false, $context);
$getRss = simplexml_load_string($getTXT);
$i = 0; // カウンタを初期化
foreach ($getRss->channel->item as $item) {
$i++;
if ($i == 6) {
break; // 5件まで表示する
}
$date = date('Y.n.j', strtotime($item->pubDate)); // 投稿日
$link = $item->link; // 記事のリンク
$title = $item->title; // 記事のタイトル
?>
<li class="news__item">
<a href="<?php echo esc_url($link); ?>" target="_blank" rel="noopener">
<div class="date"><?php echo esc_html($date); ?></div>
<div class="post-ttl"><?php echo esc_html($title); ?></div>
</a>
</li>
<?php } ?>
</ul>
simplexml_load_string()でRSS(XML)を読み込み、foreachで各記事(item)を回して、投稿日・タイトル・リンクを取り出しています。if ($i == 6)で件数を制限し、ここでは新しい5件だけを表示しています。出力時はesc_url()・esc_html()でエスケープしておくと安全です。
なお、外部フィードを毎回リアルタイムに取得すると、相手サイトの状態によっては表示が遅くなることがあります。アクセスの多いページでは、取得結果を一定時間キャッシュする仕組みを入れておくと安心です。次に紹介するfetch_feed()なら、このキャッシュを自動で行ってくれます。
表示先がWordPressサイト内であれば、WordPressに用意されているfetch_feed()関数を使う方法もあります。fetch_feed()は取得したフィードを一定時間キャッシュしてくれるため、毎回リクエストせずに済み、表示も速くなります。外部サイト(WordPress以外)に貼る場合は今回のsimplexml_load_string()を使う方法、WordPressテーマ内で使う場合はfetch_feed()、と使い分けるとよいでしょう。
/feed/を付けると確認できるfetch_feed()を使うとキャッシュも効いて便利RSSを使えば、更新のたびに手作業でお知らせを転記する必要がなくなります。複数サイトを運用しているときや、ブログの新着をコーポレートサイトに載せたいときに役立ちます。
参考:https://lifescrewdesign.com/blog/wordpress/wordpress-rssfeed/