やりたいこと
カスタム投稿タイプを含めたRSSを出力したい。
またデフォルトの投稿日時順ではなく、更新日時順にRSSの記事を並ばせたい。
その上で、RSSの記事投稿日時に記事更新日時を出力したい。
手順
RSSの記事取得条件を変更しつつ、修正したRSSテンプレートを読み込ませるようにする。
記事取得クエリの条件変更
カスタム投稿タイプをクエリに追加し、更新日時の降順にソートするようにする。
例として、今回はModern Themeのportfolioテーマにある、 work というカスタム投稿タイプを追加する。
function modify_rss2_query($query_string) { return query_posts( $query_string . "&post_type=work&orderby=modified" ); } add_action( 'rss2_head', 'modify_rss2_query' );
記事取得用クエリにpost_typeとorderbyを追加し、RSS2_headにフックさせる。
feed-rss2.phpのコピー
wp-includesにテンプレートの feed-rss2.php があるので、使用するテーマのディレクトリにコピーする。
RSSテンプレートの変更
コピーしたテンプレートを使用するため、functions.phpに以下を追記する。
remove_filter('do_feed_rss2', 'do_feed_rss2', 10); function modify_feed_rss2(){ $template_file = get_template_directory() .'/feed-rss2.php'; load_template($template_file); } add_action('do_feed_rss2', 'modify_feed_rss2', 10);
デフォルトのRSS出力処理のフックを削除し、テンプレートを変更したフックを追加し直している。
これでコピーしたテンプレートが読み込まれるようになった。
RSSの記事投稿日時を更新日時に変更
RSSテンプレートのpubDateタグに手を加える。
<pubDate><?php echo mysql2date( 'D, d M Y H:i:s +0000', get_post_time( 'Y-m-d H:i:s', true ), false );
上記を以下に変更する。
<pubDate><?php echo mysql2date( 'D, d M Y H:i:s +0000', get_post_modified_time( 'Y-m-d H:i:s', true ), false );
投稿日時取得のget_post_time()を、更新日取得のget_post_modified_time()に変更している。
validate
RSSが正常に出力されるか、以下サイトで検証する。
サイトURLを入力すれば、RSSのURLが自動検出される。
https://validator.w3.org/feed/
以下画像が出ていれば、正常となる。