商品情報や店舗情報などを掲載するサイトの場合、たくさんのカテゴリ、タグ、カスタムフィールドを持つ投稿を検索させたいケースは必ずと言っていいほどあります。カスタムフィールドは頻繁に使うものだと思います。検索機能を充実させることで、使いやすく閲覧者に優しいサイト作りをしたいものです。この検索機能の拡張ですが、プラグインを使うのもありですが自分で実装することも可能です。検索機能を使うには、テンプレートに下記のようなフォームを表示させます。キーワード検索のテキストフィールドです。この検索フォームを拡張していくのですが、その拡張したフォームデータを検索条件に含むようカスタマイズをする場合にはフィルターフックを使います。posts_search検索条件をカスタマイズしてカスタムフィールドを含ませる以下の例は、投稿のカスタムフィールドに「番号(number)」「商品コード(item_code)」「商品名(item_name)」の3項目が登録されている場合のケースです。下記のように検索フォームに「番号」「商品コード」「商品名」を追加してみました。カスタムフィールドの「名前」を入力することで、紐づく「値」が検索条件に含まれます。部分一致検索(あいまい検索)させたい場合は、以下の様なコードになります。/></div></div></form>これだけでは検索結果には反映されません。フィルターフックを使い、検索条件をカスタマイズします。'custom_search_join');?>これでカスタムフィールドの3項目で検索ができるようになりました。完全一致検索や部分一致検索したい項目を増やしたい場合は、以下のループに渡している配列に値を増やすだけでOKです。)?>今度はカテゴリで検索させてみます。触る必要なく、フォームに追加するだけでOKです。なっているのが確認できます。指定することでカテゴリを検索条件に含めることができます。検索条件をカスタマイズして複数カテゴリを含ませる今度は複数のカテゴリを条件に入れたい場合です。触る必要はありません。その代わりname属性を少し変えます。下記の例ではカテゴリをチェックボックスで選択できる様にしています。全カテゴリを取得していますが、この関数は引数を指定しなくても登録された記事がないカテゴリは表示されないようになっています。これで配列としてcatを複数渡すことができます。値については、カテゴリID(cat_ID)をセットします。検索条件に複数タグを含ませるタグの場合もカテゴリとほとんど同じです。複数検索させるため、配列として渡します。渡すとタグで絞り込んだ検索ができます。カスタマイズが必須になります。ある日付からある日付までを含む、という検索条件なので、SQLのBETWEENを使います。JOINする必要はありません。2);?>例2:カスタムフィールドを日付範囲検索させるこちらはカスタムフィールドなので、忘れずにJOINしてください。いうカスタムフィールドで日付検索をする場合は下記の通りです。ループで判別させている値はフォームでのname属性なので、フォームでのnameとカスタムフィールドの名前が一致しない場合はお気をつけください。おわりにこんな風にフィルターフックとSQLを駆使することでわりかし何でもできます。いくつか例を挙げましたが、まだまだあると思いますので試してみてはいかがでしょうか。TwitterFacebookFeedlyはてブRSSWordPressのサイト制作、保守運用にお困りの方はお気軽にご相談ください。固定ページWordPress制作のことなら何でもご相談ください。等、ご希望に合わせたサイト制作をいたします。ご相談もお受けしております。お気軽にご連絡ください。