【WordPress】検索フォームと検索結果の実装方法【テンプレートファイル】

WordPress検索フォームの実装方法のサムネイル

WordPressで検索フォームと検索結果ページを実装する方法を紹介します。

目次

検索フォーム|searchform.php

検索フォームのWordPressテンプレートファイルは下記のとおりですが、自作しなくても検索フォームが使える仕組みになっています。

searchform.php

初期設定の検索フォームのコード

WordPressで検索フォームを設置するには下記の関数を設置したいテンプレートファイルに書く必要があります。

<?php get_search_form(); ?>

このとき、検索フォームのテンプレートファイル「searchform.php」を自作していなくても、下記のデフォルトのPHPが返される仕組みになっています。

<form role="search" method="get" id="searchform" class="searchform" action="<?php echo esc_url( home_url('/') ); ?>">
  <div>
    <label class="screen-reader-text" for="s">検索:</label>
    <input type="text" value="" name="s" id="s">
    <input type="submit" id="searchsubmit" value="検索">
  </div>
</form>

検索フォームをカスタマイズしたい場合

初期設定の検索フォームをカスタマイズしたい場合には次の2つの方法があります。

カスタム方法
  • 初期設定の検索フォームコードのクラス属性にCSSを当てる。
  • 初期設定の検索フォームのコードを元に好みのsearchform.phpを作る

自由度が高いのは②の方法で、検索フォームのテンプレート自作です。これについてはインターネットにカスタムした検索フォームのコード記述例が多く紹介されています。

検索結果ページの実装|search.php

検索結果ページは自作しないと表示されませんので、その作り方を解説していきます。

テンプレートファイル作成|search.php

検索結果ページのテンプレートファイルは下記のとおり「search.php」です。

search.php

基本的には、このテンプレートファイルに記事一覧ページ(archive.phpなど)のコードを載せてカスタマイズすれば実装できます。

下の記述例は、さらに検索キーワードが未入力のまま検索ボタンが押された時の処理も条件分岐で合わせて行っています。

<!-- 未入力のまま検索した時の処置 -->
<?php if (isset($_GET['s']) && empty($_GET['s'])): ?>
  <?php echo '検索キーワードが入力されていません。'; ?>
<?php else: ?>

  <!-- 検索結果タイトル -->
  <h1>
    <?php the_search_query(); ?>の検索結果 : <?php echo esc_html($wp_query->found_posts); ?>件
  </h1>

  <!-- 検索結果のループ文  -->
  <ul>
    <?php if (have_posts()) : ?>
      <?php while (have_posts()) : the_post(); ?>
        <li>
          <a href="<?php the_permalink(); ?>">
            <h2><?php the_title(); ?></h2>
          </a>
        </li>
      <?php endwhile; ?>
    <?php else : ?>
      <p>お探しの記事は見つかりませんでした。</p>
    <?php endif; ?>

  </ul>

<?php endif; ?>

未入力で検索した場合

未入力でキーワード検索された場合に全件表示させないためには、functions.phpに以下のように設定を書きます。

// 未入力時で検索ボタンを押した時は検索結果ページに遷移(search.phpにリダイレクトする)
function set_redirect_template()
{
  if (isset($_GET['s']) && empty($_GET['s'])) {
    include(TEMPLATEPATH . '/search.php');
    exit;
  }
}
add_action('template_redirect', 'set_redirect_template');

検索結果ページのタイトル作成

検索結果のタイトル文を「〇〇の検索結果:◯件」とするためのに下記ようにsearch.phpに記述します。

<?php if (isset($_GET['s']) && empty($_GET['s'])): ?>
  <?php echo '検索キーワードが入力されていません。'; ?>
<?php else: ?>

  <!-- 検索結果タイトル文 -->
  <h1>
    <?php the_search_query(); ?>の検索結果 : <?php echo esc_html($wp_query->found_posts); ?>件
  </h1>

  <!-- 以下、検索結果のループ文 -->
<?php endif; ?>

検索対象の投稿タイプ指定

functions.phpには、検索対象とするページの指定を書く必要があります。

下の記述例は、4行目に、投稿タイプ(post固定ページ(pageおよびカスタム投稿タイプ(そのスラッグから検索される設定が書いてあります。

// 検索条件のページタイプを指定する(通常投稿とカスタム投稿)
function SearchFilter($query){
  if ($query->is_search) {
    $query->set('post_type', array('post', 'page', 'カスタム投稿タイプのスラッグ'));
  }
  return $query;
}
add_filter('pre_get_posts', 'SearchFilter');

例えば、カスタム投稿タイプのスラッグがworksであれば、5行目の記述は下記のようになります。

    $query->set('post_type', array('post', 'page', 'works'));
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

■清水WEB制作代表
■コーディング:WordPress(オリジナルテーマ制作等)・HTML・Sass・FLOCSS・JavaScript(jQuery)等
■集客力:YouTube/Instagram/ブログでそれぞれ登録者数16000人/フォロワー13000人/月間最大アクセス50000PVの集客実績があります
■文章作成:博士号所有、会社員時代は科学雑誌に寄稿していたので文章作成も得意です
■写真技術:Amazon Kindle出版で、写真集・撮影編集解説書を5冊好評発売中です

目次