【自作テーマ開発】WordPressオリジナルテーマの作成方法⑥(検索フォーム・検索結果ページ)

WordPress

検索フォームのテンプレートファイルを作成(searchform.php

まずは「キーワード入力欄」と「検索ボタン」を作成します。
これらは複数の箇所で使用することが多いので、「header.php」や「footer.php」のような共通パーツとして作成するのが良いでしょう。

ファイル名を「searchform.php」としてテンプレートファイルを作成したら、コードの中身は以下のようにします。

<form method="get" action="<?php echo esc_url(home_url('/')); ?>">
  <input type="text" name="s" id="s" placeholder="キーワードを入力" />
  <button type="submit">検索する</button>
</form>

あとは設置したい箇所に以下を描くだけです!

<?php get_search_form(); ?>

検索結果ページのテンプレートファイルを作成(search.php

ファイル名を「search.php」としてテンプレートファイルを作成します。
以下のコードを記述しましょう。

<?php get_header(); ?>
<main>
<?php if (isset($_GET['s']) && empty($_GET['s'])) { ?>
<p>検索キーワードが入力されていません。</p>
<?php } else { ?>
<h1>
  <?php the_search_query(); ?>の検索結果 : <?php echo $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>
    <?php endwhile; ?>
    <?php else : ?>
    <p>一致する記事がありませんでした。</p>
    <?php endif; ?>
  </li>
  <?php
    the_posts_pagination( array( 
      'mid_size' => 1,
      'prev_text' => '', 
      'next_text' => '' 
    ) );
  ?>
  <?php } ?>
</ul>
</main>
<?php get_footer(); ?>

functions.phpに必要な設定を記述

検索条件が未入力時には検索結果は表示しない

デフォルトではキーワードが未入力で検索すると全件表示されてしまいます。
以下を記述するとテンプレート側(seach.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');

検索対象のページタイプを指定

検索対象のページタイプはデフォルトだと「通常の投稿」や「カスタム投稿」「固定ページ」など全てになります。
しかし検索対象になるのは固定ページは対象外にしたい場合が多くあると思います。
その場合は以下を追加してください。

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

※array()の中にはすべてのカスタム投稿のスラッグを入れてください。入れない場合、検索対象から除外されます。

タイトルとURLをコピーしました