Search & Filter Pro 検索結果ページに検索ワードを出力する

ワードプレス

クロス検索の需要、そこそこあります。

プラグイン「Search & Filter」でだいたいは事足りるのですが、どうにもならないケースが発生したのでPro版を試してみたお話。

検索範囲を限定したい

  • 投稿タイプ:店舗情報
  • タクソノミー1:所在都道府県
    ターム:北海道 ~ 沖縄
  • タクソノミー2:対象者
    ターム:利用者、求職者

こんな感じでの例です。

 

普通は、選択肢に「利用者・求職者」を出せば済む話ですが、

  • 検索フォーム1:利用したい方向け
    検索結果をターム「利用者」に絞る
  • 検索フォーム2:求人に応募したい方向け
    検索結果をターム「求職者」に絞る

    と、複数必要でした。

     

    この場合、無料版だと

    • 投稿タイプを2つに分ける
    • メインループを制御してあれやこれや四苦八苦する

    くらいしか方法が思いつかないけれど、「同じ店舗なのにそれぞれに基礎情報を入力」とか絶対イヤ。

    Pro版だとこれが簡単に出来る。

    (タブ:Tags, Categories & Taxonomies)

    あぁ、らくちん。

    検索結果ページに検索ワードを表示したい

    本題。

    どういう検索条件で探した結果なのか?を表示したい。

    これもPro版のみの機能っぽい。

    出せなくてもギリギリOKが出るかもしれないけれど、やっぱり出したいです。よね?

     

    で、リファレンスに出力方法が出ているんだけど、これがどうにも動かない。

    の「Get the Search Term」あたり

     

    コピペしても何にも出力されない。

    var_dump()すれば、確かにデータは取得出来ている様子。

     

    多次元配列なんて見るのも嫌だけど仕方ない。

    global $searchandfilter;
    $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>';
    }

    これで何とかタームのラベルが出せました。

    ※「●●●」はid
    ※タームに親子関係とか適用してるとどうかな、試していないけど、、、

    ただし、検索フォームごとに用意しなくちゃならない

    idを入れていることからわかる通り、このフォームid「●●●」専用。

    そのくせ、複数列記するとダブって出力されたりする謎アリ。

     

    フォーラムで英語のやり取りも面倒だし、時間かけたくないし。

    なので、強引に遷移元ページで条件分岐。

    $url = $_SERVER[ 'HTTP_REFERER' ];
    if( strstr( $url, 'for-user' ) ){
    	/* ---------- ユーザー向け検索ページから ---------- */
    	global $searchandfilter;
    	$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>';
    	}
    }elseif( strstr( $url, 'for-recruit' ) ){
    	/* ---------- 求人向け検索ページから ---------- */
    	global $searchandfilter;
    	$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ドルと自分でフォーム作ることを考えたら破格。

    無料版に比べて大幅に使いやすいので、困ったときはお試しあれ。