BLOG

ブログ

  • Web制作

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

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>