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

ワードプレス

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

プラグイン「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ドル。自分でフォームを作ることを考えたら破格。