フォノクラフト株式会社:作業メモや備忘録など

作業メモや備忘録など…

[wp] wordpressテンプレート内でRSS(XML)を読み込む際の日付ズレ対処法

without comments

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