【WordPress】RSSにカスタム投稿タイプを追加して更新日時順に並び替える

やりたいこと

カスタム投稿タイプを含めた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()に変更している。

https://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/get_post_time

https://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/get_post_modified_time

validate

RSSが正常に出力されるか、以下サイトで検証する。

サイトURLを入力すれば、RSSのURLが自動検出される。

https://validator.w3.org/feed/

以下画像が出ていれば、正常となる。

【WordPress】RSSにカスタム投稿タイプを追加して更新日時順に並び替える - yH5BAEAAAAALAAAAAABAAEAAAIBRAA7 - 【WordPress】RSSにカスタム投稿タイプを追加して更新日時順に並び替える

コメントを残す

メールアドレスが公開されることはありません。