ワードプレスサイトに、別のワードプレスの情報をRSSで表示させてるんだけど、日にちが1日遅れてズレてる…
どうやったら修正できるんだろう?
ワードプレスを使っていると、このようなトラブルが起こってしまうものです。
昨日まで大丈夫だったのに、ある日を境に突然変わってしまいます。
なぜそんなことが起きるかというと、だいたいが自動的にワードプレス本体がアップデートされてしまうからでしょう。(ワードプレスのバージョン5.6以降から、自動更新がデフォルトになった)
もしくはプラグインが原因で干渉している場合もあります。
何年かに一度はこんなトラブルに遭遇するものです。
たぶん日本中で日々、起きているんじゃないかなと思います。
同様なトラブルで困っている方のためにトラブルシューティング方法をシェアします。
ニッチなトラブルですが、需要がありそうなので、自分の経験をベースに解決方法をまとめました。
9時間ずれる原因
ワードプレスでは、デフォルトでUTC (協定世界時)になっています。これが基準。
日本のタイムゾーンは、UTCにプラス9時間したものになりますので、初期設定する必要があります。
9時間ずれる原因の100%は、ここの部分であって、どこかがおかしいのです。
どこに問題があるのか、ひとつひとつ探っていけば、何とかなります。
そもそものタイムゾーンの設定が間違っている
「設定」の「一般」でタイムゾーンのところを「東京」
または「UTC+9」
あとは「変更を保存」するだけ。
これで直った人は、初期設定をミスってただけです。
RSSリーダーがGMTに対応していない
RSSを受信する側のRSSリーダーが、GMT(世界標準時)に対応していない場合があります。
RSSを受信する側またはRSSを発信する側いずれかが対応しなければなりません。
RSSを受信する側が時間調整をする場合
その場合、RSSを受信する側が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の具体的な使用方法が記載されています。
注意事項として、バージョンを下げすぎるとデータが壊れてしまうことがあるので、必ずバックアップ(All-in-One WP Migrationとかデータをエクスポートしたり好きな方法で)をとること。
そして、一気にバージョンを下げずに少しづつダウングレードしながら探っていきましょう。
ダウングレードして、サイトヘルスをチェックしていってPHP デフォルトタイムゾーンが無効ですの警告が出なくなるまでやってみましょう。
警告がなくなったら、上記の対処法をもう一度、ひとつずつやって検証しながら進めてみてください。焦らずに、ひとつずつやっていけば解消されるはずです。