WordPressで投稿タイプごとの検索ボックスを設置する

どうも、ホワイトです。

先日、WordPressの検索ボックス設置について、質問されることがあったので、自分のための備忘録としても残しておきたいと思います。
数年前に使ってtxtファイルに残していたけど、こうやって書き出した方が良いですね。

ここ最近では自分が関わってきたWordPress案件には何故か検索ボックス設置を行うことがなかったので久々でした。

投稿タイプを指定したコードを記述する

まぁ、当然といえば当然ですが、そういうことです。

<form method="get" id="searchColumn" action="<?php echo home_url('/'); ?>">
<input type="text" name="s" id="searchColumnInput" value="<?php the_search_query(); ?>" placeholder="カスタム投稿内を検索" />
<input type="hidden" name="post_type" value="column">
<input type="submit" value="search" accesskey="f" />
</form>

これだけ。

“column”というカスタム投稿タイプ内を検索するという設定例です。

nameでpost_type、valueで投稿タイプの”column”を指定します。

<input type="hidden" name="post_type" value="column">

こちらの行で、どの投稿タイプかの絞り込みを行います。

一行目、二行目のid、placeholderに入るのは、あくまで例なので、必要に応じて適宜変更してください。

投稿タイプごとの検索結果を表示させる

検索結果を表示させるのであれば、search.phpは最低限必要になってきますが、用意されていない場合はindex.phpが適用されて検索結果が表示されることになります。

通常の検索結果であれば、これらのファイルを用意すれば充分かと思いますが、カスタム投稿タイプに応じた検索結果を表示したいという場合はfunctions.phpへの記述と、カスタム投稿タイプごとの検索結果テンプレートファイルを作成します。

まずは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;
}

上記のコードをfunctions.phpに記述することで、カスタム投稿タイプごとの検索結果ファイルをsearch-xxxx.phpというような形で作ることができます。

“column”というカスタム投稿タイプの場合は、search-column.phpとなります。

これでカスタム投稿タイプごとの検索結果ページのデザインを変えていくことができます。

今回教えた方もすぐに使えたようなので、恐らく間違いはないでしょう。

そんなに頻度は高くないと思いますが、知っていると便利ですね。