WordPressのRSSフィードでpubDateがGMT(9時間遅く)になっているのを変更する

目次

はじめに

WordPressでは標準でRSSフィードが提供されています。
例えばこのサイトであれば「https://2017.l2tp.org/feed」が標準で提供されています。
実際にはいくつかのフィードの種類が提供されています。
その一覧は下記のとおりです。

  1. rss2
  2. rss
  3. atom
  4. rdf
  5. コメント rss2
  6. コメント atom

RSSで提供されるXMLには、投稿日時を表す pubDate という要素があります。
この pubDate が9時間ズレた値で表記されていました。
実際にはGMT(世界標準時)で記載されているのでズレてないのですが、RSSリーダーでGMTに対応していない可能性がある、ということで9時間ズラした値を出力するようにしてみました。

現在の動作確認

$ curl -s https://2017.l2tp.org/feed | grep pubDate
        <pubDate>Thu, 24 Aug 2017 07:54:19 +0000</pubDate>
        <pubDate>Thu, 24 Aug 2017 01:28:03 +0000</pubDate>

+0000となっているのでGMTで動作していますね。

変更点

RSSの出力も他の固定ページなどと同じく、テンプレートファイルを参照して出力されます。
ただしそのテンプレートファイルはテーマディレクトリには無く、WordPressのコアファイル(wp-includes)に入っています。
このファイルをテーマディレクトリにコピーします。

cp public/wp-includes/feed-rss2.php themes/l2tp

で、functions.phpでそのファイルを呼び出すように変更します。

/**
 * Use our own customized RSS feed.
 */
remove_all_actions( 'do_feed_rss2' );
add_action( 'do_feed_rss2', function() {
    get_template_part( 'feed', 'rss2' );
}, 10, 1 );

コピーしてきた feed-rss2.php のpubDate周りを変更します。

... 省略
  <pubDate><?php echo mysql2date('D, d M Y H:i:s +0900', get_post_time('Y-m-d H:i:s', false), false); ?></pubDate>
... 省略

変更点は2つです。

  1. mysql2date()の +0000 を日本標準時となる +0900 に変更
  2. get_post_time()の第二引数、GMTにするかどうかをfalseに変更

確認

ちゃんと動いているか確認しておきます。

$ curl -s https://2017.l2tp.org/feed | grep pubDate
        <pubDate>Thu, 24 Aug 2017 16:54:19 +0900</pubDate>

ちゃんと動いたようでした。

感想

最近の流れとしては基本的にGMT(+0000)として動作させることが多いと感じています。
実際に幾つかの代表的なRSSフィードのあるサイトを廻ってみましたが、ほとんどは+0000でした。
(が、これは殆どのブログでWordPressを使っているからかもしれないです)
RSSフィードの実装系もそのうちGMTにちゃんと対応してくれると思いますので、その際には+0000にしたいと思います。