WordPressの「最終更新日」について

今回、私的に少し悩ましげな問題に直面したので備忘録として残しておきます。あまり需要はない、内容ではないでしょうか。
この記事の目次
lastBuildDate(最終更新日)
事の発端は、少し前にクライアントにWordPressで制作したサイトを納品した事から始まります。そのサイトはとある業界「まとめサイト」に登録していて、自分のブログ記事を投稿すると、「まとめサイト」に複数登録されているサイトのブログRSSを取得して、日付順に表示する仕組みになっている。
とまぁ、ごく普通のRSSの表示方法なのですが、私のクライアントのRSSだけが順番がおかしいと連絡がありました。クライアントから状況を詳しく確認すると、ブログの投稿は良いが、固定ページを編集し保存すると、以前に投稿済みのブログ記事の日付が、変更されもう一度投稿される!という状態らしい。
WordPressから出力されるRSSページを確認したが、RSS上はその様なことは起こっていない!!
なぜ?

わからないまま、「まとめサイト」の管理者と話をする事になり、RSSの取得方法を確認すると、RSS上に記載されている「<lastBuildDate> 最終更新日」を取得しているらしい事が判明!
つまりRSSを取得する際に、まず「<lastBuildDate> 最終更新日」をみて、前回から日付が変更になっていれば、アップデートされていると認識し、一番新しい「<pubDate>投稿日」の記事を一覧に表示するという仕組みにしているらしい。
なので、まとめサイト管理者から簡単に「ここが変更されているからですよ!」って言われる始末( ;∀;)
WordPressのRSS出力テンプレートでは、WordPressのどこかが変更されると「<lastBuildDate> 最終更新日」が更新される様になっている。WordPressをブログのみで使用しているなら問題なくこの仕様で良いのですが、今回のサイトは、ブログ以外のページも存在しているので、標準のWordPressの仕様では支障が出てしまいます。
つまり標準のWordPressのRSS出力テンプレートでは、この度の「まとめサイト」の仕様には合わない事が判明したのです。普通にRSSを取得して、並べてくれる仕様ならよかったのに…。
コアファイルを編集したくない!
しかし上記の「まとめサイト」に対応しないといけません。
WordPressのRSSについて色々調べていると、どうも標準のRSSテンプレートは変更することができるらしい。しかしコアファイルを編集して対応しても、WordPressのヴァージョンアップで元に戻ってしまう、ヴァージョンアップ毎に毎回作業するのも疲れてしまいます。
対応策は、function.phpに標準RSSテンプレートを、「変更したRSSテンプレート」にオーバーライドさせる記述を追記する方法!!
これならWordPressのヴァージョンアップにも対応できます。
作業手順
まずは、「wp-includes」フォルダ内にある、「feed-rss.php」「feed-rss2.php」「feed-rss2-comments.php」をコピーします。
各ファイル内の「<lastBuildDate>最終更新日」が記述されているところを変更します。今回は、「<pubDate>投稿日」が表示されるようにしたいと思います。
<lastBuildDate><?php $date = get_lastpostmodified( 'GMT' );echo $date ? mysql2date( 'r', $date, false ) : date( 'r' );?></lastBuildDate>
を
<lastBuildDate><?php echo mysql2date('D, d M Y H:i:s +0000', get_post_time('Y-m-d H:i:s', true), false); ?></lastBuildDate>
な感じに書き換えて、変更した各ファイルを「themesフォルダ」内の使用中のテーマフォルダに入れて置きます。
それと同時に「function.php」に下記を追記しておきます。
/*
Plugin Name: RSS Setting
Description: RSS2の独自テンプレート
Version: 1.0
*/
// アクションフック リムーブ
remove_filter('do_feed_rss', 'do_feed_rss', 10);
remove_filter('do_feed_rss2', 'do_feed_rss2', 10);
// アクションフック 追加
function custom_feed_rss() {
$template_file = '/feed-rss.php';
$template_file = ( file_exists( get_stylesheet_directory() . $template_file )
? get_stylesheet_directory()
: ABSPATH . WPINC
) . $template_file;
load_template( $template_file );
}
add_action('do_feed_rss', 'custom_feed_rss', 10, 1);
function custom_feed_rss2( $for_comments ) {
$template_file = '/feed-rss2' . ( $for_comments ? '-comments' : '' ) . '.php';
$template_file = ( file_exists( get_stylesheet_directory() . $template_file )
? get_stylesheet_directory()
: ABSPATH . WPINC
) . $template_file;
load_template( $template_file );
}
add_action('do_feed_rss2', 'custom_feed_rss2', 10, 1);
以上で、準備完了です。
早速、RSSの出力を確認してみましょう!
「<lastBuildDate>最終更新日」の項目が、「<pubDate>投稿日」と同じ日付が表示されていれば成功です。