WordPressの外部フィード日付でハマる
昨日WordPressでハマったのでメモ。
もともとやりたかったことは、WordPressで構築したあるサイトに、外部ブログのフィードを3つ、個別に3件ずつ新着表示すること。WordPressに準備されているfetch_feed関数を使って、2つめのフィードまではうまく表示できたのです。
ところが、3つめのフィードが読み込めず、2つめのフィードになってしまうという現象が発生。あれこれ試してもうまくいかなかったので、3つめのフィードは別の手段を取ることにしました。phpのsimplexml_load_file関数で3つめのフィードだけパース。力技だけどこれでうまく行った! と思ったら。
お客様の連絡で、実際のブログの投稿日時と、新着表示部分の日付がずれているとのこと。phpのテストファイルを作って、該当部分のコードを動かしてみると問題ないのに、WordPressにコードを埋め込むと日付がずれる。
情報を探していくと、ズバリ書いているブログを発見。ありがとうございます。
WordPressのプラグインやテーマなどで、WordPressのデータベース以外の外部のリソースから日付を取得して処理する際に、時間がGMTになってしまい9時間ずれる。
WordPressの日付処理の不具合 | Firegoby
で、こんな感じのコードを書いて問題解決。なんか釈然としないけれど、目的は達成できたのでよしとするか?
<?php
$rss = simplexml_load_file("feed_url");
$i = 0;
foreach ($rss->channel->item as $item) {
if( $i++ == 3 ) { break; }
$link = $item->link;
$title = $item->title;
$timestamp = strtotime((string)$item->children('http://purl.org/dc/elements/1.1/')->date)
+ 3600 * get_option('gmt_offset');
$date = date_i18n('Y.m.d', $timestamp);
echo '<li><a href="' . $link . '" target="_blank">'
. $title . '(' . $date . ')</a></li>';
}
?>