【WordPress】カテゴリによって、検索結果を差し替えたい

【WordPress】カテゴリによって、検索結果を差し替えたい

実装の例としてはカスタム投稿タイプで検索結果のphpファイルを差し替えるものが多くあります。「template_include」フィルターにフックする関数の中で「検索にカテゴリが含まれるか」を判定できそうです。今回は検索に特定のカテゴリが含まれる場合に検索結果のphpファイルを差し替えたいと思います。

前回に続き、特定のカテゴリ内で絞り込み検索を行う仕組みを構築していきたいと思います。前回は特定のカテゴリ内で使われているタグ一覧をチェックボックスで表示し、検索結果を表示するところまで進めました。

引き続き特定のカテゴリ内で絞り込み検索をするための仕組みづくりを進めたいと思います。

専用の検索結果ファイルを準備して、検索結果を表示する

仕組みづくりに向けての調査内容

仕組みを作る上で、不明だった点を下記にまとめます。
結果としては実装可能でしたので、調査内容をそれぞれまとめていきたいと思います。

  1. 構図カテゴリ内で使われているタグの一覧をチェックボックスで出せるか?
  2. 通常のサイト内検索と、今回の絞り込み検索を両立できるか?
  3. 絞り込み検索の結果として、構図要素記事の本文を直接表示させたいができるか?

今回の内容

ここでは「通常のサイト内検索と、今回の絞り込み検索を両立できるか?」について調べた内容をまとめていきたいと思います。

検索に含まれるカテゴリは「in_category()」で調べる

WordPressの検索結果は多くの場合「search.php」で処理されます。

現在使用している「Twenty Sixteen」テーマでは、検索結果として記事のタイトル・概要・アイキャッチ画像などが表示されます。一般的な表示内容ですね。

ただ、この記事も含めて構築している特定のカテゴリ内での絞り込み検索では記事本文を表示したいと考えています。


想定している構図要素のカテゴリでは、小見出し1つ分を目安に記事を準備しています。構図要素の絞り込み検索を行うと検索結果には小見出しがいくつか表示されるので、検索するたびに必要な記事が再構築されるイメージです。


既存の「search.php」ファイル内で処理を分岐をしても実装できますが、メンテナンス性を考えると煩雑になりそうです。

調べてみると「template_include」フィルターにフックさせる関数内でカテゴリを判別できそうです。

今回は独自のphpファイル「search_composition.php」を準備し、検索に特定のカテゴリ(構図要素)が含まれている場合は処理を切り替えたいと思います。

「template_include」フィルターにフックし、カテゴリを判別するコード

実装:function.php

// 検索結果のphpを差し替える
add_filter('template_include','custom_search_template');
function custom_search_template($template){
	// 検索中かつカテゴリのスラッグがcompositionであった場合は処理
	if ( is_search() && in_category('composition')){
		// composition専用のphpファイルを読み込む
		$new_template = locate_template( array( 'search_composition.php' ) );
		if ( '' != $new_template ) {
			return $new_template ;
		}
	}
    return $template;
}

ここでは「Twenty Sixteen」テーマを想定しています。差し替えるphpファイルの場所については、環境に合わせて修正してください。

検索結果確認

まずは検索結果のタイトルを変え、切り替えがうまくいくか確認してみます。

search_composition.phpに切り替わりました
search_composition.phpに切り替わりました

うまく切り替わったようです。

後は必要な処理を書いていけば求める結果を表示できそうですね。

検索結果の画面に固定ページを再表示する

絞り込み検索では結果を確認した後に内容を再検索できると便利です。

前回の記事で作った固定ページのスラッグをカテゴリと同名にしておけば、検索結果に表示することができます。

カテゴリと同名の固定ページの取得方法については、下記をご参照ください。

記事では「archives.php」へコードを実装しています。同じコードを「search_composition.php(あるいは準備した別の検索結果phpファイル)」に実装すれば、検索結果の上部に固定ページを表示することができます。

まとめ

「template_include」フィルターへのフックではカスタム投稿タイプ毎に検索結果ファイルを差し替える紹介を多く見かけました。

当初は構図記事用のカスタム投稿タイプを作ることも検討しましたが、構図要素の記事はギャラリーなどのイラスト記事から関連記事としても出てきてほしいと考えています。

カスタム投稿タイプよりもゆるい枠で検索をかけたい場合、今回のようにカテゴリで検索できるように準備するのも良いのではないかと思いました。


この断片があなたの星へ続く道を、少しでも照らすことを願って


連載記事


<参考>

投稿者: 0.1

厚塗りで「存在感や重さ、質感による説得力」のあるイラストを目指しています。 日本では線画をベースとしたイラストが主流ですが、そこから外れたモノもイラストの世界を広げる為に必要だと考えています。「世界観にもう一味試したい」そんなときには、ぜひお声がけください。

「【WordPress】カテゴリによって、検索結果を差し替えたい」への1件のフィードバック

COMMENT