【WordPress】カスタム投稿タイプごとに別々の検索フォームを作成する方法

【WordPress】カスタム投稿タイプごとに別々の検索フォームを作成する方法 WordPress

WordPressで複数のカスタム投稿タイプを運用している場合、それぞれの投稿タイプに特化した検索フォームを設置することで、ユーザーの利便性を向上させることができます。本記事では、投稿タイプごとに異なる検索フォームを作成し、検索結果も対応させる方法を解説します。

検索フォームの基本構造を理解する

WordPressの検索フォームは、通常以下のような構造になっています。

<form role="search" method="get" action="<?php echo esc_url(home_url('/')); ?>">
  <input type="search" name="s" placeholder="検索ワード">
  <button type="submit">検索</button>
</form>

このフォームでは検索キーワード(s)のみを送信しており、投稿タイプの指定がなければ、postとpageの両方が検索対象になります。

カスタム投稿タイプを指定する検索フォーム

検索対象を特定のカスタム投稿タイプ(例:news)に限定するには、フォームにpost_typeを追加します。

<form role="search" method="get" action="<?php echo esc_url(home_url('/')); ?>">
  <input type="search" name="s" placeholder="ニュースを検索">
  <input type="hidden" name="post_type" value="news">
  <button type="submit">検索</button>
</form>

このようにすることで、検索結果はnews投稿タイプのみに絞り込まれます。

複数の検索フォームを使い分ける実装例

例1:投稿タイプ news 用の検索フォーム

<?php get_search_form('news'); ?>

ファイル名:searchform-news.php

<form role="search" method="get" action="<?php echo esc_url(home_url('/')); ?>">
  <input type="search" name="s" placeholder="ニュースを検索">
  <input type="hidden" name="post_type" value="news">
  <button type="submit">検索</button>
</form>

例2:投稿タイプ product 用の検索フォーム

<?php get_search_form('product'); ?>

ファイル名:searchform-product.php

<form role="search" method="get" action="<?php echo esc_url(home_url('/')); ?>">
  <input type="search" name="s" placeholder="商品を検索">
  <input type="hidden" name="post_type" value="product">
  <button type="submit">検索</button>
</form>

検索結果テンプレートの出力制御

検索結果が投稿タイプごとに異なる表示を必要とする場合、search.phpでは以下のように振り分けが可能です。

<?php
$post_type = get_query_var('post_type');

if ($post_type === 'news') {
  get_template_part('search-results/news');
} elseif ($post_type === 'product') {
  get_template_part('search-results/product');
} else {
  get_template_part('search-results/default');
}
?>

注意点:検索結果が表示されないときは?

検索条件が正しく指定されていない、または該当投稿タイプに公開済みの投稿がない場合、検索結果が表示されないことがあります。以下を確認しましょう。

  • post_type の値がカスタム投稿タイプのスラッグと一致しているか
  • カスタム投稿タイプが public => true で登録されているか
  • 投稿のステータスが publish であるか

まとめ

カスタム投稿タイプごとに専用の検索フォームを用意することで、検索精度を高め、ユーザー体験を向上させることが可能です。検索フォームとテンプレートの使い分けにより、柔軟な設計が実現できます。サイト構成に合わせて適切に設置してみてください。