予約投稿するとRSSの日付がPOSTと同一日でない

まさはしFPより、ブログを予約投稿したらブログ内の日付とトップページに表示される日付が一致しないと連絡あり。

wordpressのRSS投稿をみると、予約投稿した記事の日付が前の日の日付になっていた。下記サイトのようにコアファイルを修正したら治ったが、wordpressのバージョンが変わって上書きされるとまたコアファイルを再設定しなくてはならない。

※設定後ブラウザのキャッシュはクリアして確認

http://project-syatiku.com/archives/191.html

***************************************

WordPressで記事を投稿してRSSフィードを確認すると投稿時刻(pubDate)が大幅にずれている!?ってことはないですか?

おそらく投稿時間から9時間ずれていると思います。正確には9時間前か・・・な。

(なぜ9時間前なのかは中学社会の話なので省略)

これを修正しようとしてGoogle先生に聞いてみましたが、1箇所の修正ではないのでこうかなというのを自分なりにまとめておきます。

簡単にいうと投稿する時間の設定がグリニッジ標準時になっているために起こるのですが、修正するのはソース部分ですのでFTPの使用をオススメします。

念のために言っておくと、WordPressメニューの「設定」→「一般」の下部にある「タイムゾーン」とは別物です(もちろん日本なら「東京」)。

 

各ファイルの編集

1.date_default_timezone_set(‘UTC’)の変更

まずは/wp-settings.phpを編集します。変更するのは一点だけ。

変更前

// WordPress calculates offsets from UTC.
date_default_timezone_set('UTC');
 
// WordPress calculates offsets from UTC.
date_default_timezone_set('Asia/Tokyo');
 

日本時間で設定したいのでもちろん「Asia/Tokyo」に変更。ここは「UTC+9」にしても問題ないようですがやめておきました。

2.RSSフィード作成ファイルを変更

次に/wp-includes/feed-rss2.phpを変更します。実際にRSSフィードを作成しているファイルはこちらです。

(コメントのフィードも使用する場合は/wp-includes/feed-rss2-comments.phpも同様に変更してください。)

変更前①

<lastBuildDate><?php echomysql2date('D, d M Y H:i:s +0000', get_lastpostmodified('GMT'), false); ?></lastBuildDate>

変更後①

<lastBuildDate><?php echo mysql2date('D, d M Y H:i:s +0900', get_lastpostmodified('blog'), false); ?></lastBuildDate>

 

変更点は

  • 「+0000」を「+0900」に変更
  • 「GMT」を「blog」に変更

 

変更前②

<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><?php echo mysql2date('D, d M Y H:i:s +0900', get_post_time('Y-m-d H:i:s', false), false); ?></pubDate>

 

 

まとめ

非常にざっくりとまとめると

  • /wp-settings.php内のdate_default_timezone_setを「Asia/Tokyo」に設定
  • /wp-includes/feed-rss2.php内の「+0000」が含まれる行を2箇所ずつ編集する

だけです。

これでRSSフィードの投稿時間は日本時間に訂正されているはずです。

 

 

 

WordPressのRSSフィード時間がずれたり、WEBマスターでエラーになる場合

 

wp-includes/feed-rss2.php

2
3
4
5
6
<lastBuildDate><?php
$date = get_lastpostmodified();
echo $date ? mysql2date( ‘D, d M Y H:i:s +0900, $date, false ) : date( ‘D, d M Y H:i:s +0900’ );
?></lastBuildDate>
 
<pubDate><?php echo mysql2date(‘D, d M Y H:i:s +0900, get_post_time(‘Y-m-d H:i:s’, false), false); ?></pubDate>

 

 

wp-includes/feed-rss2-comments.php

 

<lastBuildDate><?php
$date = get_lastcommentmodified();
echo $date ? mysql2date( ‘r’, $date ) : date( ‘r’ );
?></lastBuildDate>
 
 
<pubDate><?php echo mysql2date(‘D, d M Y H:i:s +0900, get_comment_time(‘Y-m-d H:i:s’, false, false), false); ?></pubDate>