
投稿タイプごとに検索フォーム、検索結果ページを変更して表示
WordPressの検索機能は、デフォルトでは、すべての投稿を対象にしています。今回は、投稿タイプごとに検索フォーム、検索結果ページを変更して表示する方法を紹介します。
検索結果ページ切り替え
今回は、ブログページを例にコードを設定します。検索結果ページを投稿タイプで分岐するため、下記コードを、functions.phpに記入します。
add_filter('template_include','custom_search_template');
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;
}
検索フォーム
searchform-blog.phpを作成し、下記コードを入力します。
<form method="get" class="search-form" action="<?php echo esc_url( home_url( '/' ) ); ?>" >
<div class="search-box">
<input type="hidden" name="post_type" value="all_blogs">
<input type="text" placeholder="キーワード" value="<?php if(is_search()){ echo get_search_query();} ?>" class="search-input" name="s">
</div>
</form>
検索フォームを設置したい場所に、下記コードを入力します。
<?php get_template_part('searchform-blog'); ?>
検索結果
searchform-blog.phpを作成します。検索結果ページを作成し、検索したキーワードを表示したい場所に、下記コードを入力します。
<?php if ( get_search_query() ): ?>
<div class="searchResult-head">
<div class="title">
<span class="result_text">Result For</span><h3><?php the_search_query(); ?> </h3>
</div>
</div>
<?php endif; ?>
検索結果を表示したい場所に、下記コードを入力します。
<?php
if ( have_posts() && get_search_query() ) :
while ( have_posts() ) : the_post();
?>
<!-- ループ内 -->
<?php endwhile; ?>
<?php get_template_part( 'content-pager' );?>
<?php elseif( ! get_search_query() ): ?>
<h3> 検索ワードが入力されていません</h3>
<?php else: ?>
<h3> 該当する記事は見つかりませんでした。</h3>
<?php endif; ?>
以上で今回の説明は終了です。複数の検索フォームを設置する可能性がある場合は、投稿タイプで分岐して作成すると便利です。