- Web制作
WordPress 検索フォームごとに search.php を変える

カスタム投稿ごとに検索結果を変えたり、タームごとに変えたり。
search.php を複数作りたい時のお話です。
searchform.php の中で search_type を指定して、指定された search_type によって search.php を変えていきます。
《searchform.php》
<form role="search" method="get" id="searchform" class="searchform" action="">
<input type="hidden" name="search_type" value="blog">
<div id="keyword-search-wrap">
<input name="s" id="s" type="text" class="keyword-search" placeholder="例)キーワード" value="" required="required">
</div>
<div id="submit-btn-wrap">
<input name="" type="submit" class="submit-btn" value="検索する">
</div>
</form>
2行目:<input type=”hidden” name=”search_type” value=”blog”>
この部分で search_type を指定します。
type=”hidden” としているので実際には表示されません。
次に search_type が “blog” の時に search-blog.php が適用されるように functions.php に記述します。
《functions.php》
// 検索フォームごとに search.php を変える
add_action('template_include', 'my_search_template');
function my_search_template($template)
{
$type = filter_input(INPUT_GET, 'search_type');
$new_template = '';
if ($type) {
switch ($type) {
case 'news':
$new_template = STYLESHEETPATH . '/search-news.php';
break;
case 'blog':
$new_template = STYLESHEETPATH . '/search-blog.php';
break;
default:
$new_template = '';
}
}
if ($new_template) {
if (file_exists($new_template)) {
return $new_template;
}
}
return $template;
}
他のフォームを作りたいときは searchform-news.php などを作成して、呼び出したい部分で下のように呼び出します。
<div class="searchform-news">
<?php get_template_part('searchform-news'); ?>
</div>

名古屋の Web 制作会社で 9 年半働いた後フリーランスに。中小企業のWEBサイト制作実績 120 サイト以上。ディレクション、デザイン、コーディング、WordPress 構築まで手掛けます。Web制作に関わる情報やワーケーション日記などを執筆しています。