特定のカスタム投稿タイプに絞って、サイト内検索をする方法についてご紹介します。
検索入力フォームの設置
まずは検索フォームの設置からです。
下記コードを任意の場所に記述します。
<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(); ?>