WordPressの外部フィード日付でハマる

2015.02.17

昨日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>';
}
?>