WordPress投稿記事のみ対象とした 検索フォームを実装する

2018.05.18 2019.05.10wordpressカスタマイズ
WordPress投稿記事のみ対象とした 検索フォームを実装する

WordPress投稿記事のみ対象とした検索フォームを実装、
さらにカスタム投稿のみ対象としたフォームを実装する。

WordPressの通常の検索ではサイト全体を対象とした検索になってしまいます。
今回はpostのみ対象とした検索フォームの実装方法

searchform.phpを以下に変えます

<form role="search" method="get" action="<?php bloginfo('url'); ?>">
	<input type="text" placeholder="キーワードを入力" name="s" id="s" value="">
	<input type="hidden" value="post" name="post_type" id="post_type">
	<input class="submitBtn" type="submit" value="検索">
</form>

type=”hidden” value=”post” に
name=”s” id=”s” sでないと動作しません。(なぜかはしらないw)

検索結果はsearch.phpで生成されますので、結果のタイトルや本文などを表示したい場合はリンクの取得やタイトル取得、contents取得などループを記載しておきます。

検索窓を設置したい箇所に

<?php get_search_form(); ?>

記載します。

カスタム投稿のみ対象とした検索フォームの実装
検索結果の表示を違うレイアウトや内容にしたい場合等にテンプレートが使えるようにするには
search-●●.php←検索結果表示用
を準備します。
●●の部分はカスタム投稿のpost type名で。

functions.phpにsearch-●●.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;
}

検索フォーム部分は以下に変えます。
(テンプレにして読み込んでも窓を表示したいところに直ガキでもどうぞ)

<form role="search" method="get" action="<?php bloginfo('url'); ?>">
	<input type="text" placeholder="キーワードを入力" name="s" id="s" value="">
	<input type="hidden" value="●●" name="post_type" id="post_type">
	<input class="submitBtn" type="submit" value="検索">
</form>

●●はpost type名を