ワードプレスのRSSフィードが9時間ずれる原因と解決方法まとめ

ワードプレスサイトに、別のワードプレスの情報をRSSで表示させてるんだけど、日にちが1日遅れてズレてる…
どうやったら修正できるんだろう?

ワードプレスを使っていると、このようなトラブルが起こってしまうものです。
昨日まで大丈夫だったのに、ある日を境に突然変わってしまいます。

なぜそんなことが起きるかというと、だいたいが自動的にワードプレス本体がアップデートされてしまうからでしょう。(ワードプレスのバージョン5.6以降から、自動更新がデフォルトになった)
もしくはプラグインが原因で干渉している場合もあります。

何年かに一度はこんなトラブルに遭遇するものです。
たぶん日本中で日々、起きているんじゃないかなと思います。
同様なトラブルで困っている方のためにトラブルシューティング方法をシェアします。

ニッチなトラブルですが、需要がありそうなので、自分の経験をベースに解決方法をまとめました。

目次

9時間ずれる原因

ワードプレスでは、デフォルトでUTC (協定世界時)になっています。これが基準。
日本のタイムゾーンは、UTCにプラス9時間したものになりますので、初期設定する必要があります。
9時間ずれる原因の100%は、ここの部分であって、どこかがおかしいのです。
どこに問題があるのか、ひとつひとつ探っていけば、何とかなります。

そもそものタイムゾーンの設定が間違っている

「設定」の「一般」でタイムゾーンのところを「東京」

または「UTC+9」

あとは「変更を保存」するだけ。
これで直った人は、初期設定をミスってただけです。

RSSリーダーがGMTに対応していない

RSSを受信する側のRSSリーダーが、GMT(世界標準時)に対応していない場合があります。
RSSを受信する側またはRSSを発信する側いずれかが対応しなければなりません。

RSSを受信する側が時間調整をする場合

その場合、RSSを受信する側がRSSから取得する時間に+9時間すると調整されます。
以下のページで新着記事一覧を表示するショートコードの作り方が紹介されています。

アナライズギア開発ブログ
WordPress RSSから取得した記事公開日時の9時間ずれるの現象を修正する方法 先日「WordPress RSSから新着記事一覧を表示するショートコード」というタイトルの記事を書きましたが、公開日時の時間が9時間ずれていましたので修正版のコードを載せます...

RSSを発信する側が時間調整する場合

記事の更新時間を出力するファイルを編集します。
そこで時間を9時間プラスするというわけです。
RSSを出力するファイルは、feed-rss2.phpになります。場所は以下にありますので、ダウンロードしましょう。

/wp-includes/feed-rss2.php

にあります。
このファイルの中に以下の記載があります。

<pubDate><?php echo mysql2date( ‘D, d M Y H:i:s +0000’, get_post_time( ‘Y-m-d H:i:s’, true ), false ); ?></pubDate>

このpubDateで記事の出力時間を指定しています。
受信する側は、ここから日時のデータを取得するのです。
9時間プラスすること、さらにGMT時間かどうかをfalseに変更の二箇所修正します。

<pubDate><?php echo mysql2date( ‘D, d M Y H:i:s +0900′, get_post_time( ‘Y-m-d H:i:s’, false ), false ); ?></pubDate>

これをそのままFTPでアップしないように。
バージョンアップした時に上書きされて消えてしまいます。

これを回避するため、ワードプレスのテーマフォルダにfeed-rss2.phpをアップしましょう。

/wp-content/theme/テーマ名/feed-rss2.php

次は、テーマのfunctions.phpに以下を記載するとテーマフォルダのfeed-rss2.phpを読み込んでくれます。

remove_filter(‘do_feed_rss2’, ‘do_feed_rss2’, 10);
function custom_feed_rss2(){
$template_file = ‘/feed-rss2.php’;
load_template(get_template_directory() . $template_file);
}
add_action(‘do_feed_rss2’, ‘custom_feed_rss2’, 10);

サイトのRSSファイルを読み込むと+9時間されていることを確認できるでしょう。

受信する側のRSSキャッシュを短くして確認

次はRSSを受信する側です。
RSSのキャッシュの保持時間の初期設定12時間なので、確認するために12時間も待ってはいられません。
ワードプレスの以下のファイルを開きましょう。

/wp-includes/feed.php

以下の部分で、12時間と設定されていますので

wp_feed_cache_transient_lifetime’, 12 * HOUR_IN_SECONDS, $url

以下のように60秒に設定しました。

wp_feed_cache_transient_lifetime’, 60, $url

これで保存して確認して、時間のズレが解消されていたら、12時間に戻してあげましょう。

ワードプレスのサイトヘルスを確認

ここまでやってまだ直らない方のためのさらなる対処法です。

ワードプレスをバージョンアップするとある日突然、不具合が起きてしまうことがあります。データベースやPHPのバージョンだったり、はたまたプラグインとの相性という場合もあるでしょう。
そこで、見落としがちなのがワードプレスのサイトヘルス

ダッシュボードのサイトヘルスステータスをチェックしてみましょう。

PHP デフォルトタイムゾーンが無効です

という警告が出ていたら、それこそが9時間ずれる原因です。
「PHP のデフォルトタイムゾーンは date_default_timezone_set() 関数呼び出しによって WordPress を読み込んだあとに変更されました。これにより、日付と時刻の正しい計算が妨げられています。」
という文章が下に添えられているかと思います。

いまのワードプレスのバージョンと合っていないということです。
バージョンダウンしてあげましょう。

バージョンダウンする方法は簡単です。
WP Downgradeというプラグインを使うとワードプレスのダウングレードを行えます。
データのバックアップをとった上で、バージョンダウンをしながら
PHP デフォルトタイムゾーンが無効です
の警告がでないところまで下げましょう。

以下のページでWP Downgradeの具体的な使用方法が記載されています。

Kinsta®
WordPressサイトを前のバージョンに戻す方法(プラグインやテーマの問題解決に) WordPressをダウングレードしてサイトのトラブルシューティングを行う安全な方法をお探しですか?WordPressを前のバージョンに戻す機能は標準搭載ではありませんが、解決策...

注意事項として、バージョンを下げすぎるとデータが壊れてしまうことがあるので、必ずバックアップ(All-in-One WP Migrationとかデータをエクスポートしたり好きな方法で)をとること。
そして、一気にバージョンを下げずに少しづつダウングレードしながら探っていきましょう。

ダウングレードして、サイトヘルスをチェックしていってPHP デフォルトタイムゾーンが無効ですの警告が出なくなるまでやってみましょう。

警告がなくなったら、上記の対処法をもう一度、ひとつずつやって検証しながら進めてみてください。焦らずに、ひとつずつやっていけば解消されるはずです。

目次