見出し画像

その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に記載したほうがいいですね。実際はこのへんも対応したほうがよさそうですが、ここでは省略。

本日は以上です。

この記事が気に入ったらサポートをしてみませんか?