[wp] wordpressテンプレート内でRSS(XML)を読み込む際の日付ズレ対処法
wordpress内部でRSS(XML)を読み込む際には注意が必要
普通であれば下記ソースの様にすることでXMLを簡単に読み込むことができます。
参考:http://www.ibm.com/developerworks/jp/xml/library/x-simplexml.html
※曜日は日本語で日〜土と表示するようにしています。
» サンプルダウンロードはこちらから。
<?php //参考:http://www.ibm.com/developerworks/jp/xml/library/x-simplexml.html // simplexml_load_file関数はPHP 5.1 以降で使用可能です。 $rss = simplexml_load_file('rss.xml'); $title = $rss->channel->title; ?> <html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title><?php echo $title; ?></title> </head> <body> <h1><?php echo $title; ?></h1> <?php foreach ($rss->channel->item as $item) { $pubDate= $item->pubDate; $time=strtotime($pubDate); $week = Array('日','月','火','水','木','金','土');//曜日を日本語にする「w」は曜日を0〜6で出力しています。 $week_day=date("w",$time); $pubDate=date("Y年n月j日",$time); echo "<h2>" . $pubDate . "(" . $week[$week_day] . ")<a href='" . $item->link . "'>" . $item->title . "</a></h2>"; echo "<p>" . $item->description . "</p>"; } ?> </body> </html>
しかし、wordpressではwp-settings.php内でタイムゾーンがUTCに固定されている為、data関数もつられて日本時間と9時間のズレが生じてしまうのです。
修正するには、日付をstrtotime関数でUnixタイムスタンプ形式に変換した後「$●●●● + 3600 * get_option(‘gmt_offset’);」で処理してあげます。
実際にwordpressテンプレート内に書く場合のサンプルは以下です。ご参考まで。
<?php $rss = simplexml_load_file('rss.xml'); foreach ($rss->channel->item as $item) { $pubDate = $item->pubDate; $time = strtotime($pubDate); $time = $time + 3600 * get_option('gmt_offset');//wordpressで外部のリソース(RSSやファイルのタイムスタンプなど)から日付を取得して処理する際には、この3600のおまじないをする必要がある。 $week = Array('日','月','火','水','木','金','土');//曜日を日本語にする「w」は曜日を0〜6で出力しています。 $week_day=date("w",$time); $pubDate=date("Y年n月j日",$time); ?> <div class="left"> <?php echo $pubDate ?><?php echo "(" . $week[$week_day] . ")"; ?> </div> <div class="right"> <h4><a href="<?php echo $item->link ?>" target="_blank"><?php echo $item->title ?></a></h4> <p><?php echo $item->description ?></p> </div> <?php } ?>