WordPress RSSから新着記事一覧を表示するショートコード

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) 

コメント

タイトルとURLをコピーしました