WordPress のフィードにカスタム投稿タイプの記事も含める方法

WordPress のカスタマイズ案件で、お客さんから「カスタム投稿タイプも、全体の RSS フィードに含めてよ~」と言われたのでやってみました。

標準では、以下のような URL リクエストで WordPress の全体の RSS フィードを取得できます。

http://example.com/feed/

ところがこれにはカスタム投稿タイプの記事は含まれません。カスタム投稿タイプの RSS フィードは以下のような URL リクエストで取得します。

http://example.com/feed/post_type=post_type_name
http://example.com/post_type_slug/feed/

『post_type_name』 はカスタム投稿タイプ名、『post_type_slug』はカスタム投稿タイプのスラッグです。カスタム投稿タイプ名とカスタム投稿タイプのスラッグに異なる文字列を定義してる場合は注意。

カスタム投稿タイプの記事が全体の RSS フィードに含まれるように、以下のコードを functions.php に追加します。

// RSSフィードにカスタム投稿タイプも含める
function add_custom_post_feed($query) {
    // フィードリクエストの場合に実行
    if (is_feed()) {
        // post_type(投稿タイプ)が空なら全体の RSS
        $post_type = $query->get('post_type');
        if (empty($post_type)) {
            // 通常の投稿とカスタム投稿タイプを指定
            $query->set('post_type', array(
                'post',
                'post_type_name1', // カスタム投稿タイプ名を指定
                'post_type_name2', // 複数指定可。フィードに出力したいもののみ指定。
            ));
        }
        return $query;
    }
}
// pre_get_posts フィルターに追加
add_filter('pre_get_posts', 'add_custom_post_feed');

post_type が空かどうかをチェックして、URL リクエストによる個別の RSS フィード取得も出来るようにしています。

スポンサーリンク
レクタングル(大)
レクタングル(大)