投稿タイプごとに検索フォーム、検索結果ページを変更して表示

  • PHP
  • 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; ?>

    以上で今回の説明は終了です。複数の検索フォームを設置する可能性がある場合は、投稿タイプで分岐して作成すると便利です。

    RECOMMEND

    CONTACT

    Webサイト作成は、是非
    CXG DESIGNへご検討ください。