目次
カスタム投稿タイプを追加する
まずは、カスタム投稿タイプを作成します。
様々な条件を指定することができますが、今回は下記コードのような条件で「ニュース」と「お知らせ」を作成しました。
検索フィルターで制御するために、search_filter関数を使用する
search_filter関数は、pre_get_postsフィルターにフックしており、クエリがデータベースから投稿を取得する前に変更できる場所です。
この関数は、もし$query->is_search が真である場合、リクエストのURLに含まれる「custom_post_type」パラメータを取得し、その値をサニタイズしています。
また、もし「custom_post_type」パラメータが指定されていない場合は、デフォルトで 'post' 投稿タイプを選択するように指定してあげます。
そのほかにも、選択可能なカスタム投稿タイプを定義したり、もし $custom_post_type が $allowed_post_types 配列に含まれている場合、クエリオブジェクトに post_type パラメータを設定して、検索結果が指定されたカスタム投稿タイプに制限されるようにしていて、最終的には、変更されたクエリを返し、WordPressがそれを使用して検索結果を表示します。
function.php
フォームを設置する
では、実際に特定のカスタム投稿タイプのみを検索結果に表示できるか確認するために、簡単なフォームを設置してみます。
page-slug.php / serchform.php検索結果画面の作成
検索結果を表示するページも作成しておきましょう
検索結果URL
上記全てを実装すると、検索結果画面のURLは下記のような形式になるはずです
http://localhost:8888/test/?s=searchword&custom_post_type=newsまとめ
カスタム投稿タイプの追加、検索フィルターの制御、フォームの設置、検索結果画面の作成を通じて、特定の条件での検索機能が実装されたかと思います。特定の投稿タイプに絞り込んで検索する基礎を実装できたので、今後もフィルターフックで様々な機能を実装していきましょう!