18:14get_search_queryis_main_querypre_get_posts検索TweetPocketサイト内検索のカスタマイズちょっとサイト内検索周りを調べていたのでメモ。やりたいことサイト内検索の検索対象(投稿・固定ページ・カスタム投稿など)を設定したい。サイト内検索の検索ワードを取得して保存したい。プラグインで実装したい。この3つを実現したい。Extension」の拡張機能としてサイト内検索ウィジェットに実装したい。2番目の内容は新しいプラグインの機能として調べてみて3番目の内容になるプラグインで実装というところにもっていきたい。何はともあれフックポイントを調べようと思い、検索すると最初にpre_get_postsというアクションフックを発見。Codexの解説を読んで見ることに。このフックはクエリ変数オブジェクトの生成後、実際にクエリが実行される前に呼び出されます。返り値は必要ありません)。「$queryオブジェクトへの参照」とあるので、pre_get_postのアクションフックのコールバック関数で参照できるということか。$queryの内容を確認するためにダンプしてみる。);object(WP_Query)あ、WP_Queryオブジェクトが表示された。この値を使ってサイト内検索結果ページ(is_search)かどうか判断すればいいのか。・お、しかしそれだけでは不十分のようで、これまたCodexに記載がある。このフィルターは管理画面のクエリに影響を与えるのにも使えます。変更が「投稿一覧」画面に影響を与えていないか確認してください。チェックしてください。Codex日本語版クラスリファレンス/pre_get_postsの「管理画面での使われ方」より引用つまりメインクエリであり管理画面でない状態で、サイト内検索が行われたら○○という分岐処理を行えばいいのね。ご丁寧にちゃんとサンプルが掲載されている。サイト内検索が行われた後の処理}}できた!\(^o^)/あとはやりたい処理それぞれを足してあげればできるな。対象にする投稿タイプを設定できる$query->set()で対応する。);デフォルトは投稿(post)と固定ページ(page)なので$query->set()でpost_typeに投稿対応を配列で渡してあげればOK。実際にやりたい処理はウィジェット側で検索対象にしたい投稿タイプを選択できるようにするので、チェックした投稿タイプを配列にして渡してあげれば良さそう。サイト内検索の検索文字列を取得する方法searchform.php内でも使用されている、get_search_query()で取得する。);mb_convert_kana()で全角スペースを半角スペースに変換。複合検索に対応するためのもの。その後、explode()関数で、配列に変換してその配列の中身を登録していけばOK。ここで、get_search_query()で良いのかという若干の疑問.......。$queryに既にパラメータ(s)の値が入っているので、そちらをそのまま使ったほうが効率が良いのか。get_search_query()の中にはフックポイントが仕掛けられているから、それを残したほうが良いか。「株式会社まなびと」の代表取締役はじめました。宮崎県で活動するフロントエンドエンジニア。フロントエンド業の傍らWordPressのプラグイン開発や公式テーマレビュー、Webマーケティングやプログラミング教室の講師などのいろいろなお仕事をしてます。JSerでPHPer。