先日「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
コメント