その2:求人サイトの検索機能をプラグインなしでWP_Queryにて実現(複数のカスタムフィールドのAND検索)
前の記事「求人サイトの検索機能をプラグインなしでWP_Queryにて実現(複数のカスタムフィールドのAND検索)」の機能アップを考えていて、ちょっと続きを。
検索機能の仕様を確認
今の検索機能は以下のような仕様になっています。
①複数のカスタムフィールドに検索ワードを入れてAND検索
②ひとつのカスタムフィールドには一つの検索ワードしか入れられない
前の記事でもちょっと触れていましたが、これを以下のように改修してみたいと思います。
①複数のカスタムフィールドに検索ワードを入れてAND検索
②ひとつのカスタムフィールドに複数ワードをスペース区切りでいれてAND検索
③①と②の組合わせ
こうするとより普通の求人サイトの検索機能に近づいてきます。
前の記事のsearch.phpを改修
昨日のソースのWP_Queryに検索条件を渡す部分を以下のように変えてみましょう。
・検索フォームに入力された検索ワードを空白(スペース)で分割する
・分割した結果、検索ワード数が判明する
・検索ワード数分、検索条件を追加する
・終わったら次のカスタムフィールドを同様に処理
また、昨日のソースのよりもちょとだけ汎用性をもたせました。
以下、改修の参考ソースです。一部だけです。
・・・・
// カスタムフィールドの検索テキストが存在したら検索条件に追加
$args_meta_query=array();
$array_cf_search_words=array();
// 職種
$cf_name = 'occupation'; //カスタムフィールド名
$search_words = preg_split('/[\s]+/',mb_convert_kana($_GET[$cf_name], 's'),-1, PREG_SPLIT_NO_EMPTY);
if(count($search_words)>0){
foreach ( $search_words as $word ) {
if ( !empty($word) ) {
$args_meta_query[] = array('key' => $cf_name,'value' => $word,'compare' => 'LIKE');
}
}
}
・・・・
この書き方だと、$cf_name にカスタムフィールド名を書き換えつつ、カスタムフィールド分、このコードを書かないとならないので長ーくなっちゃいます。
もっとソースを短くするには
カスタムフィールドを取得して、カスタムフィールド分、順番に処理するように書けばよいかと思います。こちらは省略。
あと、いまsearch.phpに記載していますが、本来はfunctions.phpに記載したほうがいいですね。実際はこのへんも対応したほうがよさそうですが、ここでは省略。
本日は以上です。
この記事が気に入ったらサポートをしてみませんか?