【WordPress】検索条件に一致しない場合でも投稿を表示させる方法

【WordPress】検索条件に一致しない場合でも投稿を表示させる方法 WordPress

WordPressで検索機能を実装していると、「検索条件に一致する投稿が0件」の場合に何も表示されず、ユーザー体験が悪化することがあります。そこで本記事では、検索条件に一致しない場合でも代替の投稿を表示させる方法を紹介します。

なぜ「0件表示」ではダメなのか?

検索結果が0件だと、ユーザーは「このサイトには情報がない」と感じて離脱する可能性があります。例えば以下のような状況です。

  • 複数条件で絞り込んだ結果、1件もヒットしなかった
  • 入力ミスにより意図しない検索になった

このような場合に代わりの投稿を表示すれば、ユーザーの離脱を防ぎ、回遊率の向上にもつながります。

実装方針 検索結果が0件の場合は代替投稿を表示する

WordPressの pre_get_posts フィルターとテンプレート内の have_posts() 判定を組み合わせて対応します。

ステップ1 pre_get_postsで検索条件を記録しておく(任意)

必要に応じて、検索条件が0件のときだけ別のクエリに切り替えるための情報を記録しておきます。

ステップ2 テンプレートファイルで have_posts() を使って判定

例えば search.php で以下のように条件分岐します。

<?php if (have_posts()): ?>
  <h2>検索結果</h2>
  <?php while (have_posts()): the_post(); ?>
    <article>
      <h3><?php the_title(); ?></h3>
      <p><?php the_excerpt(); ?></p>
    </article>
  <?php endwhile; ?>
<?php else: ?>
  <h2>該当する投稿が見つかりませんでした。</h2>
  <p>代わりに最新の投稿をご紹介します。</p>

  <?php
  // 代替投稿の表示
  $args = array(
    'post_type' => 'post',
    'posts_per_page' => 5,
    'post_status' => 'publish',
  );
  $fallback_query = new WP_Query($args);

  if ($fallback_query->have_posts()):
    while ($fallback_query->have_posts()): $fallback_query->the_post();
  ?>
    <article>
      <h3><?php the_title(); ?></h3>
      <p><?php the_excerpt(); ?></p>
    </article>
  <?php
    endwhile;
    wp_reset_postdata();
  endif;
  ?>
<?php endif; ?>

応用 カテゴリ別や人気投稿の表示にも対応可能

表示する代替投稿は、以下のように応用できます。

代替表示内容 設定例
最新記事 'orderby' => 'date'
特定カテゴリの投稿 'category_name' => 'news'
人気投稿(プラグイン使用) 'meta_key' => 'views', 'orderby' => 'meta_value_num'(※要カスタム実装)

まとめ

WordPressの検索結果が0件でも、適切に代替投稿を表示することでユーザー満足度を高めることができます。検索体験の改善はSEOにもつながるため、積極的に導入するのがおすすめです。