WordPressのサイト内検索で、検索結果に使われるテンプレートはsearch.phpです。search.phpがない場合はindex.phpが使用されます。page-○○.phpやsingle-○○.phpと同じように、カスタム投稿用のテンプレートを作成しても、検索結果では適用してくれません。
そのため、投稿タイプ毎に検索結果を変えたい場合は、search.php内で条件分岐をさせる必要があります。search.php内で条件分岐させても良いのですが、内容が複雑になると管理が大変です。
そこで今回は、「search-投稿タイプ名.php」というファイルを作成することで、検索結果を投稿タイプ別にカスタマイズできるようにする方法をご紹介したいと思います。
投稿タイプ別に異なる検索結果用のテンプレートを使えるようにする方法
投稿タイプ用の検索結果テンプレートを有効化するには、以下のコードをfunctions.phpに追加します。
function custom_search_template($template){ if ( is_search() ){ $post_types = get_query_var('post_type'); foreach ( (array) $post_types as $post_type ) $templates[] = "search-{$post_type}.php"; $templates[] = 'search.php'; $template = get_query_template('search',$templates); } return $template; } add_filter('template_include','custom_search_template');
コピペでOKです。例えば、custompostという投稿タイプ用のテンプレートを追加する場合は、上記コードを追加したうえで、「search-custompost.php」というファイルを追加します。すると、custompostの検索結果では、search-custompost.phpが優先して適用されるようになります。
あとがき
コピペで機能するようになるので簡単ですね。
カスタム投稿によって絞り込み検索する方法については、「WordPressのキーワード検索で投稿タイプによる絞り込みを行う方法」をご参照ください。