すごく珍しい依頼がありました。
「Wordpressで、AというサイトとBというサイトがあります。Aを見れる人は、Bは見れません。Bを見れる人はAも見れます。」
ふむふむ、普通にサイト分けて、権限分けにはいろんな方法ありますね。で?
「AもBも見た目ほぼ一緒で、Bの人はあまり意識せず両方のサイトを見てます。」
「問題は、BでWordpessで検索かけたときは、同時にAも検索かけて結果をまとめて表示してほしいんです。」
Googleカスタム検索で検索対象を指定して何とかなりませんかね?
「イントラです。」
う・・・
半日考えて出した結果がWordpressのREST APIです。RESTが使えるってことは知ってましたが、最近WordpressのプラグインからWordpress組み込みになったらしく、どのドキュメントを読んだらいいのか、自分の知りたい情報がわかるまで、まるでドキュメントサイトにたらい回しにあってるみたいです。
結局私の参考にしたのは:
https://developer.wordpress.org/rest-api/
サイトに対して検索をかけるには:
http(s)://ホスト名/wp-json/wp/v2/posts?s=検索語
検索結果にはページのタイトルやらコンテンツやら全部入ってきます。
RESTで別サーバの検索をかけるのは意外と簡単だと分かったのですが、二つのサイトの検索結果を一つのサイトのように見せるにはいろいろ工夫が必要です。
検索結果の順番がどちらかのサイトに偏らないように、両方のサイトから全結果を取り出して、日付でソートをかけ、検索結果の順番をばらけさせなければなりません。
Wordpressで設定されている1ページあたりの件数でページ繰りをするには、WP_Page_Naviなどのようなプラグインを使ったページャーは今回使えないので、PearのPagerを使うといった具合です。
RESTでは一度に取ってこれる記事は最高20件まで。全部の結果を取り出すにはfopenやfile_get_contentsを実行した後の$http_response_headerの中を確認して、全件数と全ページ数を取り出し、全件数を受け取るまでループで回します。
また、固定ページも検索対象なら、RESTのURLは
http(s)://ホスト名/wp-json/wp/v2/pages?s=検索語
も追加します。
こうして、一応検索ページはできましたが、心配なのはパフォーマンス。一回の検索で、自サイト内以外に、RESTで最低2回の問い合わせ。よくある検索語なら、一体何回になるやら。
それは、サイトがオープンされるまではわかりません。