WordPressはPHPでできているので、他サイトのRSSを読み込ませてサイドバーなどに新着記事を表示するのも簡単だ…と思っていたら意外と手こずったのでメモ。
いくつかプラグインも配布されているようなのだが、受託案件でデザイン的な制約があったので自作することとする。WordPressではfetch_rss()、wp_rss()、get_rss()という関数が用意されていて、楽に実装できるようだ。それぞれ、fetch_rss()が配列で取得、wp_rss()が<ul>付きでリスト表示、get_rss()が<ul>なしでリスト表示というのが主な違い。
使い方は以下ページで分かりやすく解説されています。
WebTecNote – [WP]wordpressでRSSを取得して表示
詰まったのは日時を表示させようと思ったため。wp_rss()とget_rss()のどちらも記事の投稿日時は表示されない。そのためfetch_rss()でRSSデータを配列で取得して表示してみるが、こんな風に表示される。
2009-05-13T08:26:08+09:00
これではちょっと困る。調べてみたところこの日時の表示形式はW3CDTFというそうで、この形式を解釈するparse_w3cdtf()という関数もあるみたい。なーんだ。
というわけで、関数にしてみました。functions.phpに書いておけばテンプレート中で使えます。
function custom_get_rss($feed,$maxitems){
$rss = fetch_rss($feed);
$items = array_slice($rss->items, 0, $maxitems);
if (empty($items)) {
echo '<li>No Items</li>';
} else {
foreach ( $items as $item ){
echo '<li><a href="' . $item['link'] . '" title="' . $item['title'] . '>';
echo $item['title'];
echo '</a>';
if($item['dc']['date']){
echo '<span class="date">' . date('Y年m月d日',parse_w3cdtf($item['dc']['date'])) . '</span>';
}
echo '</li>';
}
}
}
タネさえ分かってしまえば実に便利。
(上記サンプルはRSSの種類を考慮していないので読み込むRSSによっては動かない場合もあります。ご了承ください。)