特定のカスタム投稿タイプに絞って、サイト内検索をする方法についてご紹介します。
検索入力フォームの設置
まずは検索フォームの設置からです。
下記コードを任意の場所に記述します。
<form action="<?php echo home_url(); ?>" method="get"> <input type="text" name="s" value="<?php the_search_query(); ?>" placeholder="検索する"> <input type="hidden" name="post_type" value="<?php echo esc_html(get_post_type_object(get_post_type())->name); ?>"> <button>送信する</button> </form>
inputタグのhiddenタイプを使って、サーバーにカスタム投稿タイプの情報を送り、検索対象を限定します。
value属性にはカスタム投稿タイプのスラッグを入れます。
カスタム投稿タイプのスラッグを取得
<?php echo esc_html(get_post_type_object(get_post_type())->name); ?>
こちらのコードをvalue属性に入れることで、表示ページのカスタム投稿タイプを当てはめてくれます。
複数のカスタム投稿を実装している場合に、検索対象を特定のカスタム投稿タイプに限定したい時に便利です。
get_post_type_object(get_post_type())->name → カスタム投稿タイプのスラッグを取得
esc_html() → エスケープ処理を行う関数
複数のカスタム投稿タイプから検索したい場合
<input type="hidden" name="post_type[]" value="news"> <input type="hidden" name="post_type[]" value="blog">
検索対象を複数にしたい場合は、name属性を配列post_type[]にして、value属性に対象のカスタム投稿タイプを入れてあげます。
検索結果ページの設置
search.php
検索結果ページはテンプレートファイル「search.php」を使用します。
<?php if( have_posts() ): ?>
<h2>「<?php the_search_query(); ?>」の検索結果</h2>
<?php while( have_posts() ): the_post(); ?>
<ul>
<li>
<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
</li>
</ul>
<?php endwhile; ?>
<!-- 検索ワードがヒットしないとき -->
<?php else: ?>
<p>検索結果はありませんでした。</p>
<p>再度サイト内検索、または下部リンクより目的のページをお探しください。</p>
<?php endif; ?>
検索結果が0件の時を考慮し、else文を使って記事がない場合の表示を記述しましょう。
検索ワードの取得
検索ワードは下記テンプレートタグで取得できます。
<?php the_search_query(); ?>


