WordPressが生成するRSSから新着記事一覧を取得し表示するショートコードです。(※未検証ですが、WordPress以外のRSSでもフォーマットが同じであれば動くと思います。)
ショートコード追加用の関数
※以下のショートコードは9時間公開日時がずれますので、修正版の「WordPress RSSから取得した記事公開日時の9時間ずれるの現象を修正する方法」を参照願います。
/**
* RSSのURLを指定して新着記事一覧を表示するショートコード
*/
function ag_get_recent_posts_by_rss($atts)
{
//連想配列から変数を作成
extract(
//ショートコードの無効な属性値を除外する
shortcode_atts(
array(
'rss_url' => ''
),
$atts
)
);
//対象WordPressのRSSが出力するXMLをパースしオブジェクトに代入
if ($rss_url) {
$rss_url = $rss_url;
} else {
$rss_url = 'https://analyzegear.co.jp/blog/feed';
}
$rss = simplexml_load_file($rss_url);
//foreachで回して各記事のデータを取得し配列に入れる
$news_list = array(); $news_cnt = 0;
foreach($rss->channel->item as $item)
{
$news_list[] = array(
'title' => $item->title, //記事タイトル
'date' => date("Y/m/d", strtotime($item->pubDate)), //日付
'link' => $item->link //リンク
);
$news_cnt++;
//配列に格納する記事数制御(※この場合は5件)
if ($news_cnt==5) {
break;
}
}
$str = '<ul class="">';
foreach($news_list as $news)
{
$str.='<li class="">';
$str.= '<a href="'.$news['link'].'">'.$news['date'].' '.$news['title'].'</a>';
$str.='</li>';
}
$str.='</ul>';
return $str;
}
add_shortcode('ag_recent_posts', 'ag_get_recent_posts_by_rss');
出力箇所で利用するショートコード
ショートコードの引数の「rss_url」にWordPressのRSSのURLを指定します。※未指定の場合は関数内で定義したデフォルトのRSSで処理するようにしています
[ag_recent_posts rss_url='https://analyzegear.co.jp/blog/feed']
動作確認環境情報
WordPress 5.2.3 PHP7.2.17 MySQL 5.7 エックスサーバー(x10)
コメント