検索フォームの基本 【WordPress】

検索フォームの設置

フォーム作成:searchform.php

<form method="get" action="<?php echo esc_url(home_url('/')); ?>">
  <input type="search" value="" placeholder="サイト内検索" name="s">
  <button type="submit">検索ボタン</button>
</form>

フォーム設置

任意のテンプレートで下記のコードを利用。

<?php get_search_form(); ?>

検索結果を表示

search.php

<div class="articles-wrapper">
   //検索ワード
   <h2 class="search-word"><?php the_search_query() ?></h2>
   <ul>
   <?php if($wp_query->have_posts()): ?>
   <?php while($wp_query->have_posts()): $wp_query->the_post(); ?>
        <li>
           //記事タイトル
           <h3 class="title">
               <a href="<?php the_permalink();?>"><?php the_title() ?></a>
           </h3>
           //記事本文の抜粋
           <p class="excerpt"><?php the_excerpt()?></p>
        </li>
   <?php endwhile; ?>
   <?php endif; ?>
   <?php wp_reset_postdata(); ?>
   </ul>
</div>

複数ワード検索に対応

デフォルトだと、全角スペースでの複数ワード検索に対応してくれない。
※「ワード1 ワード2」で検索した際に、全角スペースも含めて1単語と認識されてしまう。

下記のプラグインを導入すると、全角スペースでの複数ワード検索が可能になる。

WP Multibyte Patch
Multibyte functionality enhancement for the WordPress Japane...

検索に条件を追加

functions.php

フィルターフックを設定する。

<?php
function custom_search_query( $query ) {
    if ( !is_admin() && $query->is_search() && $query->is_main_query() ) {
        $query->set( 'posts_per_page', '10' ); // ページあたりの投稿数を10に設定
        $query->set( 'orderby', 'date' ); // 投稿日時順に並び替え
        $query->set( 'order', 'DESC' ); // 降順で表示
    }
}
add_action( 'pre_get_posts', 'custom_search_query' );
?>

↑は「表示件数は10件、投稿日順に表示」という条件を追加している。

参考

tamatuf : Wrdpressでサイト内検索を作る方法

マイクロ・トムの小屋 : 全角スペースでも絞り込み検索を行えるようにする方法

コメント

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