WEB業界で働く人や興味がある人に役立つ情報サイト“qam(カム)”

K.K.

2024/11/26

カスタム投稿専用のsearch.phpをWordPressで作成する手順

投稿者: K.K.
カテゴリー: プログラム >CMS

WordPressでは、検索結果を表示するためのテンプレートファイルとしてsearch.phpが使用されます。しかし、特定のカスタム投稿タイプごとに異なるデザインやレイアウトを持つ検索結果ページを作成したい場合、標準のsearch.phpでは柔軟性に欠ける場合があります。
今回は、カスタム投稿タイプごとにsearch.phpを切り替える方法をご紹介します。

search.phpをカスタマイズする方法

  • 条件分岐で投稿タイプを判別
    カスタム投稿タイプの検索結果をカスタマイズするにはfunctions.phpやsearch.phpに条件分岐を追加します。

    search.php の冒頭に追加

    <?php
    if (get_query_var('post_type') === 'custom_post_type') {
        // custom_post_type-search.php にリダイレクト
        include(locate_template('custom_post_type-search.php'));
        exit;
    }
    ?>
    
  • カスタムテンプレートを作成
    次にcustom_post_type-search.phpというファイルをテーマディレクトリ内に作成します。このファイルに、カスタム投稿タイプ専用の検索結果デザインを記述します。

クエリを調整する方法

WordPressの検索フォームにおいて、デフォルトでは全ての投稿タイプが検索対象になります。特定の投稿タイプだけを検索対象とする場合はfunctions.phpでクエリをカスタマイズします。

  • 検索クエリをカスタム投稿タイプに限定

    add_filter('pre_get_posts', function($query) {
        if ($query->is_search && !is_admin()) {
            $query->set('post_type', ['custom_post_type']); // 検索対象を指定
        }
        return $query;
    });
    

    このコードを追加することで、検索クエリがカスタム投稿タイプcustom_post_typeのみを対象とします。

投稿タイプごとに独立したデザインを作成

custom_post_type-search.phpに検索結果のデザインを記述します。

  • 検索結果のループ

    <?php
    if (have_posts()) :
        while (have_posts()) : the_post();
    ?>
            <article>
                <h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
                <p><?php the_excerpt(); ?></p>
            </article>
    <?php
        endwhile;
    else :
        echo '<p>該当する結果が見つかりませんでした。</p>';
    endif;
    ?>
    

まとめ

カスタム投稿タイプごとに検索結果のテンプレートを切り替えることで、ユーザにとってより分かりやすく検索結果ページを提供できます。このカスタマイズは、特に複数の投稿タイプを扱うサイトや、特定の投稿タイプに特化したデザインが求められる場合に有用なため、ぜひ活用していきましょう。

コーディング業務のご依頼、ご相談の詳細についてはこちらから

最後までお読みいただき、ありがとうございました。

よろしければシェアしていただければ幸いです。

  • このエントリーをはてなブックマークに追加

関連記事

よろしければこちらの記事もお読みください。

WEB業界ならqam!qam(カム)はWEB業界で働く人や興味がある人に役立つ情報サイトです。
マーケティングやデザイン、マークアップ(コーディング)、プログラム、トレンドなどの情報をqamライター陣が執筆。噛めば噛むほど(読めば読むほど)制作・開発や運営・運用、業界知識やノウハウを学ぶことができます。

トップへ