クロス検索の需要、そこそこあります。
プラグイン「Search & Filter」でだいたいは事足りるのですが、どうにもならないケースが発生したのでPro版を試してみたお話。
検索範囲を限定したい
- 投稿タイプ:店舗情報
- タクソノミー1:所在都道府県
ターム:北海道 ~ 沖縄 - タクソノミー2:対象者
ターム:利用者、求職者
こんな感じでの例です。
普通は、選択肢に「利用者・求職者」を出せば済む話ですが、
- 検索フォーム1:利用したい方向け
検索結果をターム「利用者」に絞る - 検索フォーム2:求人に応募したい方向け
検索結果をターム「求職者」に絞る
と、複数必要でした。
この場合、無料版だと
- 投稿タイプを「利用情報/求人情報」の2つに分ける
- メインループを制御してあれやこれや四苦八苦する
くらいしか方法が思いつかないけれど、「同じ店舗なのに、それぞれに基礎情報を入力」とか絶対イヤ。
Pro版だとこれが簡単に出来る。
(タブ:Tags, Categories & Taxonomies)
あぁ、らくちん。
検索結果ページに検索ワードを表示したい
本題。
どういう検索条件で探した結果なのか?を表示したい。
これもPro版のみの機能っぽい。
分類とフリーワードのクロス検索なら、こんな感じで出るようです。
global $searchandfilter;
$sf_current_query = $searchandfilter->get( '●●●' )->current_query();
$result = $sf_current_query->get_array();
$free_word = $sf_current_query->get_search_term();
foreach( $result as $key => $value ){
if( !empty( $value ) ){
echo '<span class="search-word term-word">' . $value["active_terms"][0]["name"] . '</span>';
}
}
if( !empty( $free_word ) ){
echo '<span class="search-word free-word">' . $free_word . '</span>';
}
※「●●●」はid
※タームに親子関係とか適用してるとどうかな、試していないけど、、、
キーごとの出力変更
検索項目ごとに出力内容やCSSを変えたい場合。
foreach( $result as $key => $value ){
if( $key === '項目1' ){
}else{
}
}
こんな感じで条件分岐できます。
キー名を調べる場合、下記で確認できます。
var_dump( $sf_current_query->get_array() );
ただし、検索フォームごとに用意しなくちゃならない
idを入れていることからわかる通り、このフォームid「●●●」専用。
そのくせ、複数列記するとダブって出力されたりする謎アリ。
フォーラムで英語のやり取りも面倒だし、時間かけたくないし。
なので、検索結果URL中の文字列検索で条件分岐。
URLは「Display Results > Set a slug?」で変えられるっぽいので、下記はデフォルト(自動で入力されている状態)。
$url = $_SERVER[ 'REQUEST_URI' ];
global $searchandfilter;
if( strstr( $url, 'sfid=■■■' ) ){
/* ---------- ユーザー向け検索の出力 ---------- */
echo '<span class="search-word search-word-objective">' . '利用情報' . '</span>';
$sf_current_query = $searchandfilter->get(■■■)->current_query();
}elseif( strstr( $url, 'sfid=▲▲▲' ) ){
/* ---------- 求人向け検索の出力 ---------- */
echo '<span class="search-word search-word-objective">' . '求人情報' . '</span>';
$sf_current_query = $searchandfilter->get(▲▲▲)->current_query();
}
$result = $sf_current_query->get_array();
foreach( $result as $key => $value ){
echo '<span class="search-word">' . $value["active_terms"][0]["name"] . '</span>';
}
これでだいたい出来た。
当然、同じページに複数の検索フォームは置けない。
まぁ、そんなときはフォームを1つにまとめて、検索条件に「利用者/求職者」を付けるでしょうけれど。
上記のクセはありますが、1サイトのライセンスなら20ドル。自分でフォームを作ることを考えたら破格。