【WordPress】カスタム投稿タイプをRSSに含める方法

【WordPress】カスタム投稿タイプをRSSに含める方法 WordPress

WordPressではデフォルトで投稿(post)のみがRSSフィードに含まれます。しかし、カスタム投稿タイプを使ってサイトを構築している場合、それらの投稿もRSSに含めたいケースがあるでしょう。この記事では、カスタム投稿タイプをRSSフィードに含める方法について詳しく解説します。

スポンサーリンク

なぜカスタム投稿タイプがRSSに含まれないのか

WordPressのRSSフィード(例:https://example.com/feed/)では、標準ではpostタイプの投稿のみが出力対象となります。custom_post_typeのようなカスタム投稿タイプは、特別な指定をしない限りフィードに含まれません。

これはpre_get_postsアクションでフィードのクエリをカスタマイズできる仕組みを使うことで、対応が可能です。

カスタム投稿タイプをRSSに含める基本的なコード

以下のコードをfunctions.phpに追加することで、指定したカスタム投稿タイプをRSSフィードに含めることができます。

functions.php:カスタム投稿タイプをメインフィードに追加
function add_custom_post_types_to_rss($query) {
  if ($query->is_feed() && $query->is_main_query() && !$query->get('post_type')) {
    $post_types = array('post', 'custom_post_type'); // 対象の投稿タイプを追加
    $query->set('post_type', $post_types);
  }
}
add_action('pre_get_posts', 'add_custom_post_types_to_rss');
  • is_feed():RSSフィードであるかを判定
  • is_main_query():メインクエリであるかを判定(管理画面などへの影響を防ぐ)
  • !$query->get(‘post_type’):URLでpost_typeが明示的に指定されていない場合のみ上書き(後述の専用フィードURLと衝突させないためのガード)
  • post_typeにカスタム投稿タイプを配列形式で追加

複数のカスタム投稿タイプを含めたい場合

複数の投稿タイプをフィードに出力したい場合は、配列に追加していくだけで対応可能です。

複数のカスタム投稿タイプを配列で指定
$query->set('post_type', array('post', 'news', 'event', 'blog'));

このようにすれば、newsやeventといったカスタム投稿タイプもRSSに含まれるようになります。

フィードURLをカスタム投稿タイプ専用にしたい場合

もし「カスタム投稿タイプ専用のRSS」を作成したい場合は、次のようなURLでアクセスできます。

カスタム投稿タイプ専用フィードのURL
Example Domain

この方法でカスタム投稿タイプ専用のRSSフィードを取得することもできます。外部サービスでこのフィードを使いたいときにも便利です。上記「基本的なコード」のガード条件(!$query->get('post_type'))により、このURLでアクセスした場合はpost_typeが上書きされず、指定したカスタム投稿タイプのみのフィードになります。

関連記事

よくある質問(FAQ)

Qカスタム投稿タイプをWordPressのRSSフィードに含めるには?
Apre_get_postsフックでis_feed()を確認し、$query->set(‘post_type’, array(‘post’, ‘custom_type’))でカスタム投稿タイプをフィードに追加します。
Qregister_post_type()でRSS対応を設定するパラメーターはありますか?
Aregister_post_type()に「has_feed」という引数は存在しません。専用フィード(/{post_type}/feed/)は、rewrite引数のfeedsサブキー(’rewrite’ => array(‘feeds’ => true))で制御します。デフォルトはhas_archiveの値を継承するため、has_archiveをtrueにしていれば追加設定なしで専用フィードが有効になります。メインフィードへの追加はpre_get_postsで行います。
register_post_type()で専用フィードを明示的に有効化
register_post_type('custom_post_type', array(
  'has_archive' => true,
  'rewrite' => array('feeds' => true), // 専用フィード /custom_post_type/feed/ を有効化
));
Q特定のカスタム投稿タイプのみの専用RSSフィードURLを作るには?
Arewriteのfeedsをtrue(またはhas_archiveがtrue)にしていれば/post-type-slug/feed/として専用フィードが作成されます。また/?post_type=custom_type&feed=rss2のURLでも専用フィードにアクセスできます。

まとめ

カスタム投稿タイプを使用しているWordPressサイトでは、RSSフィードの対応も忘れてはいけません。

functions.phpに数行のコードを追加するだけで、カスタム投稿タイプをRSSに含めることができ、情報発信の幅を広げることが可能になります。

RSSを活用することで、外部サービスとの連携や自動投稿、メール配信システムなどにも活用できるので、ぜひ導入してみてください。