空欄検索の結果を0件として表示する方法

Cocoonカスタマイズ集
この記事は約2分で読めます。
記事内に広告が含まれています。

記事に記載したコードは、スキンに追加されています。

はじめに

変更前

WordPressの検索フォームで、検索キーワードを入力せずに検索ボタンをクリックすると、全ての投稿が表示されます(図1参照)。
これはWordPressの標準仕様です。

そこで、検索キーワードが空の場合に、全ての投稿が表示されないようにします。

この記事では、この方法について説明します。

完成イメージ

実装手順

以下のコードをfunctions.phpに追加します。


add_action('pre_get_posts', function ($query) {
  if (is_admin() || !$query->is_main_query() || !$query->is_search()) {
    return;
  }

  // 検索キーワードが空の場合は検索結果を0件に設定
  if (empty(trim(get_search_query()))) {
    $query->set('post__in', [0]);
  }
});

補足

前述のコードの他にも、以下のように実装することができます。
SQLクエリに and 0=1を追加することで、常に条件が偽となり、どんな投稿も検索結果に含まれなくなります。
その結果、検索結果は必ずゼロ件になります。

add_filter('posts_search', function ($search, $query) {
  if ($query->is_main_query() && is_search() && empty(get_search_query())) {
    // 検索キーワードが空の場合は偽の条件を追加
    $search .= ' AND 0=1';
  }

  return $search;
}, 10, 2);

応用:オリジナルのページに変更する方法

完成イメージ

「NOT FOUND」だけでは、少し物足りない印象を受けるかもしれません。
そこで、ページに遊び心を加え、より魅力的なデザインに仕上げます。
そのため、図2に示すように、「NOT FOUND」テンプレートをパターンで作成した内容に変更します。

実装手順

上記のコードに加え、以下のコードをfunctions.phpに追加します。

add_filter('cocoon_part__tmp/list-not-found-posts', function ($content) {
  return do_shortcode('[pattern id=パターンID]');
});

さいごに

今回紹介した方法を使えば、検索キーが空の場合に検索結果が0件として表示されるようになります。
これにより全投稿が表示されることを防ぎ、ユーザーが適切に検索結果を受け取れるようになります。
この方法はWordPressの標準機能を活用しているため、他のテーマでも利用可能です

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