[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 } ?>
