【WordPress】検索結果ページをカスタマイズする方法|条件分岐とテンプレート編集

WordPress

WordPressの検索結果ページは、デフォルトではsearch.phpまたはindex.phpのテンプレートを使って一覧を表示します。しかしそのままでは自由度が低く、ユーザー体験やSEOの観点で物足りない場合があります。ここでは検索結果ページをカスタマイズする方法を条件分岐とテンプレート編集の両面から解説します。

検索結果ページ用テンプレートの作成

検索結果ページを独自にデザインしたい場合は、テーマ直下にsearch.phpを作成します。WordPressは検索結果ページにアクセスすると自動的にsearch.phpを探して読み込みます。

<?php get_header(); ?>

<main class="search-results">
  <h1>検索結果:<?php echo get_search_query(); ?></h1>

  <?php if (have_posts()): ?>
    <ul class="result-list">
      <?php while (have_posts()): the_post(); ?>
        <li>
          <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
        </li>
      <?php endwhile; ?>
    </ul>
  <?php else: ?>
    <p>該当する記事は見つかりませんでした。</p>
  <?php endif; ?>
</main>

<?php get_footer(); ?>

条件分岐で表示を切り替える

検索結果に特定の投稿タイプやカテゴリーだけを表示したい場合は、functions.phpでpre_get_postsを使います。

<?php
// 検索結果から固定ページを除外し、投稿のみ表示
add_action('pre_get_posts', function ($query) {
  if ($query->is_search() && $query->is_main_query() && !is_admin()) {
    $query->set('post_type', 'post');
  }
});

また、条件分岐タグを使って検索結果ページに特定のメッセージを出すことも可能です。

<?php if (is_search() && !have_posts()): ?>
  <p>「<?php echo get_search_query(); ?>」に一致する記事はありませんでした。</p>
<?php endif; ?>

検索結果を強調表示する

検索キーワードに一致した部分をハイライト表示すれば、ユーザーが探している情報を見つけやすくなります。

<?php
function highlight_search_term($text) {
  if (is_search()) {
    $query = get_search_query();
    if ($query) {
      $text = preg_replace('/(' . preg_quote($query, '/') . ')/iu', '<mark>$1</mark>', $text);
    }
  }
  return $text;
}
add_filter('the_title', 'highlight_search_term');
add_filter('the_excerpt', 'highlight_search_term');

ページネーションの追加

検索結果が多い場合はページネーションを設置してユーザーが移動しやすくすることが重要です。

<div class="pagination">
  <?php the_posts_pagination(array(
    'mid_size' => 2,
    'prev_text' => '≪ 前へ',
    'next_text' => '次へ ≫',
  )); ?>
</div>

まとめ

WordPressの検索結果ページはsearch.phpを編集するだけで独自のデザインに変更できます。さらにpre_get_postsを使えば表示対象を絞り込め、キーワードの強調表示やページネーションを追加すればユーザー体験が向上します。テンプレート編集と条件分岐を組み合わせて、自分のサイトに最適化された検索結果ページを実装しましょう。