【WordPress】ホーム画面と検索結果の一覧にカスタム投稿タイプを含める方法

WordPress

WordPressで、ホーム画面と検索結果の一覧にカスタム投稿タイプを含める方法です。

カスタム投稿タイプの利用方法はさまざま考えられますが、通常の投稿(Post)などと同じような扱いで投稿と一緒にトップページや検索結果に表示する場合はpre_get_postsアクションフックを使用することでシンプルに実現できます。

サンプルコード:ホーム画面と検索結果の一覧にカスタム投稿タイプを含める

以下のコードをfunctions.phpなどに張り付けて使用してください。

コード内の「(カスタム投稿タイプのスラッグ)」部分は各自のサイトで利用している内容に書き換える必要があります。

// ホーム画面と検索結果一覧にカスタム投稿タイプを含める
function main_query_filter($query) {
    if (!is_admin() && $query->is_main_query()) { // 管理画面以外のメインクエリか?
        if ($query->is_search() || $query->is_home()) { // ホーム画面、もしくは検索結果一覧か?
            // クエリの投稿タイプにカスタム投稿タイプを追加する
            $query->set('post_type', array('post', '(カスタム投稿タイプのスラッグ)'));
        }
    }
}
add_action( 'pre_get_posts','main_query_filter' );

カスタマイズ:ホーム画面や検索結果一覧以外に表示する画面を変更する

上記のサンプルコードでは「ホーム画面」もしくは「検索結果一覧」に表示されるように判定しています。この判定にはメインクエリで使用しているWP Queryクラスがもつ「is_*」プロパティを利用します。(サンプルコードでは$queryで渡されたインスタンス)

is_search()プロパティで検索結果一覧の判定、is_home()でホーム画面の判定を行っていますが、その他のプロパティなどを使うことでカテゴリアーカイブやタグアーカイブでのみ表示するようにもできます。

if ($query->is_search() || $query->is_category() || $query->is_tag()) {
    $query->set('post_type', array('post', '(カスタム投稿タイプのスラッグ)'));
}

などとすると、検索結果とカテゴリアーカイブ、タグアーカイブのいずれかでカスタム投稿タイプを表示するようにできます。is_category()プロパティがカテゴリアーカイブの判定、is_tag()プロパティがタグアーカイブの判定です。

カスタマイズ:表示するカスタム投稿タイプを複数指定する

また、set()メソッドの第2引数は投稿タイプを列挙する配列になっていますので、複数のカスタム投稿タイプを含めたい場合は以下のようにカンマ区切りで複数記述すればOKです。

if ($query->is_search) {
    $query->set('post_type', array('post', '(スラッグA)', '(スラッグB)', '(スラッグC)'));
}

コメント

タイトルとURLをコピーしました