SWELLのテーマ内で検索をするとたくさん記事カードが表示されますが、いったい何記事あるのか?はわかりませんよね?

そこで検索に一致した総件数をタイトルに表示します。現在のページに並んだカード数ではなく、次のページ以降も含む件数です。

本記事ではその件数表示のやり方を解説します。
SWELLで検索結果に件数を表示するカスタマイズ
やり方は簡単です。
SWELL 2.19.0のソースで確認したswell_get_search_titleフィルターを使います。検索テンプレート全体を置き換える必要はありません。
functions.phpにフィルターを追加する
子テーマのfunctions.phpをバックアップします。
既存PHPの開始タグの内側に以下を追加します。PHPスニペット管理プラグインを使う場合はそちらだけに登録し、二重登録を避けてください。
function waza_search_result_count_title($title) {
if (!is_search()) return $title;
global $wp_query;
if (!$wp_query instanceof WP_Query || $wp_query->get("no_found_rows")) {
return $title;
}
$count = (int) $wp_query->found_posts;
return $title . '(' . number_format_i18n($count) . '件)';
}
add_filter('swell_get_search_title', 'waza_search_result_count_title');検索語を含む元のタイトルを維持し、総件数を計算するメイン検索クエリのfound_postsを末尾に追加します。
プラグインなどがno_found_rowsを有効にして総件数の計算を省略した場合は、件数を付けず元のタイトルを返します。
カードが表示されているのに0件と案内しないための分岐で、総件数を別のクエリで再計算する処理ではありません。
件数を表示したい場合は、検証環境で検索クエリの総件数計算が有効な構成を確認してください。
検索対象の投稿タイプや絞り込み条件自体は変更しません。
ページ送り後も総件数は同じです。別のプラグインが検索クエリやタイトルを変更している場合は併用状態で確認してください。
最後に保存しましょう。
確認
最後に確認してみましょう。

総件数と表示カード数を分けて確かめる
| 検索結果3件・1ページ2件の例 | タイトルの件数 | 表示カード数 |
|---|---|---|
| 1ページ目 | 3件 | 2件 |
| 2ページ目 | 3件 | 1件 |
| 該当する記事がない検索 | 0件 | 0件 |
実WordPressとSWELL 2.19.0の検索フォームから専用の3投稿を検索し、PCとMobile表示でページ送りをEnterキーで操作しました。1ページ目はタイトル3件・カード2件、2ページ目はタイトル3件・カード1件となり、該当しない検索語では0件と表示されました。
カード数と総件数の差が気になる場合は、2ページ目まで含めて確認します。総件数そのものが想定と違う場合は、検索対象の投稿タイプや他の絞り込み処理を確認します。このタイトル用フィルターを変更しても検索対象は増えません。
反映されないときは、子テーマのsearch.phpがSWELLのタイトル関数を使っているかを先に確認します。その後で対象ページのキャッシュ更新を確認し、PHPを重ねて登録することは避けてください。
スマホで検索フォームから2ページ目まで確認する
検索フォームへページ送りが発生する検索語を入れてEnterキーを押し、検索結果の2ページ目も開きます。
Mobile表示では長い検索語が改行され、件数とカードが横方向にはみ出さないことを確認しました。
掲載した画面では2ページ目のカードは1件ですが、タイトルの総件数は3件です。実際のサイトでは表示件数を変更せず、複数ページになる検索語で確認してください。

投稿タイプを混ぜた検索でも総件数を確認する
| 検索条件 | 総件数 | そのページの表示数 |
|---|---|---|
| 通常投稿と制作事例・1ページ目 | 5件 | 2件 |
| 通常投稿と制作事例・3ページ目 | 5件 | 1件 |
| 制作事例のみ | 2件 | 2件 |
複数の投稿タイプを検索するサイトでは、検索フォームが送信した条件をそのまま使って件数を確認します。
件数表示用のフィルターだけでは、検索対象の投稿タイプは増えません。
検索対象の切り替えは特定アーカイブの表示形式を切り替える記事と分けて確認してください。
今回の隔離環境では同じ検索語を持つ通常投稿3件と制作事例2件を作り、1ページの表示を2件にして実HTTPで検索しました。
1ページ目はカード2件でも見出しの総件数は5件で、ページ番号3をEnterで開いた最終ページも総件数5件のままでした。
制作事例だけを対象にした検索は2件になりました。
最終ページに残った制作事例のリンクもEnterで開き、対象の記事へ到達することを確認しています。
上の画面は最終ページで、見出しの5件とカード1件を見比べられます。
表示枚数と総件数が違うこと自体は異常ではありません。
自分のサイトで数字が違う場合は、同じ検索URLで投稿タイプとページ番号を確認し、見出しを変更する別のスニペットが有効になっていないか調べます。
今回のコードを外すときは検索タイトル用のフィルターだけを元に戻し、検索フォームの投稿タイプ設定は必要な範囲で維持します。
独自検索プラグインとWP Rocketの組み合わせ、スマホからの検索操作は今回の検証に含めていません。

まとめ
戻す場合は追加した関数とadd_filter行を外し、変更前のfunctions.phpへ戻します。
他のテーマでは表示されているといった、ちょっとしたカスタマイズですが、気になった方は試してみてください。
公開前に、検索結果0件・複数件・2ページ目で総件数とカードの件数を分けて確認します。PCとスマホで検索語と件数がはみ出さないこと、検索フォームとページ送りをキーボードで操作できることも確認してください。
よくある質問:SWELLで検索結果に件数を表示するとき
検索結果に、何の件数を表示しますか?
記事では、検索に一致した総件数をタイトルに表示します。現在のページに並んだカード数ではなく、次のページ以降も含む件数です。
どのフィルターを使いますか?
記事では、SWELL 2.19.0のソースで確認したswell_get_search_titleフィルターを使います。検索テンプレート全体を置き換える必要はありません。
コードは、どこに追加しますか?
記事では、子テーマのfunctions.phpをバックアップし、既存PHPの開始タグの内側に追加します。PHPスニペット管理プラグインを使う場合はそちらだけに登録し、二重登録を避けます。
タイトルの件数とカード数が違うのは、おかしくないですか?
おかしくありません。記事の例では、検索結果が3件で1ページ2件の場合、1ページ目はタイトル3件・カード2件、2ページ目はタイトル3件・カード1件になります。カード数と総件数の差が気になる場合は、2ページ目まで含めて確認します。
総件数が想定と違うときは、どうしますか?
記事では、検索対象の投稿タイプや他の絞り込み処理を確認します。このタイトル用フィルターを変更しても検索対象は増えません。別のプラグインが検索クエリやタイトルを変更している場合は、併用状態で確認します。
件数が反映されないときは、何を確認しますか?
記事では、子テーマのsearch.phpがSWELLのタイトル関数を使っているかを先に確認します。その後で対象ページのキャッシュ更新を確認し、PHPを重ねて登録することは避けます。
プラグインによっては、件数が表示されないことがありますか?
あります。記事では、プラグインなどが総件数の計算を省略した場合は、件数を付けず元のタイトルを返します。カードが表示されているのに0件と案内しないための分岐で、総件数を別のクエリで再計算する処理ではありません。件数を表示したい場合は、検証環境で検索クエリの総件数計算が有効な構成を確認します。
通常投稿と制作事例のように、投稿タイプを混ぜた検索でも使えますか?
記事の隔離環境では、通常投稿3件と制作事例2件を同じ検索語で作り、総件数5件が表示されることを確認しています。ただし、件数表示用のフィルターだけでは検索対象の投稿タイプは増えません。複数の投稿タイプを検索するサイトでは、検索フォームが送信した条件をそのまま使って件数を確認します。



