WordPress RSSから取得した記事公開日時の9時間ずれるの現象を修正する方法

先日「WordPress RSSから新着記事一覧を表示するショートコード」というタイトルの記事を書きましたが、公開日時の時間が9時間ずれていましたので修正版のコードを載せます。

RSS内の公開日時を確認

RSSから取得した公開日時は 協定世界時(UTC+0000)になっていましたので、日本標準時(UTC+0900)に変換してあげる必要があります。

<pubDate>Tue, 18 Feb 2020 16:22:17 +0000</pubDate>

協定世界時から日本標準時へ変換

以下のように公開日時に9時間足すことで協定世界時(UTC+0000)から日本標準時 (UTC+0900) へ変換します。

$pubDate = date( "Y-m-d H:i:s", strtotime( $item->pubDate ) ); //公開日取得
$news_list[] = array(
    'title'   => $item->title, //記事タイトル
    'date'    => date("Y/m/d", strtotime( $pubDate." +9 hour") ), //取得した公開日に9時間足す
    'link'    => $item->link //リンク
);
$news_cnt++;

修正版のショートコード追加用の関数

/**
 * 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)
    {
        $pubDate = date( "Y-m-d H:i:s", strtotime( $item->pubDate ) ); //公開日取得
        $news_list[] = array(
            'title'   => $item->title, //記事タイトル
            'date'    => date("Y/m/d", strtotime( $pubDate." +9 hour") ), //取得した公開日に9時間足す
            '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');

動作環境情報

エックスサーバー(x10)
PHP 7.2.17
MySQL 5.7
WordPress 5.3.2

コメント

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