フリーワード検索でカスタムフィールドの中身も検索
RishunTradingです。便利なWordpressの検索パラメータ(*1)ですが、基本検索対象はタイトルと本文と抜粋です。
※1 検索パラメータについては以前記載しているので以下も確認してみてください。
「WP_Queryやget_postsのパラメータまとめ」
フリーワードで検索させるような場合、たいていは、タイトルと本文内の検索で事足りますが、お客様が扱う情報をカスタムフィールドを設けて格納しているような場合には、フリーワード検索時の対象フィールドにこのカスタムフィールドも含めて検索する場合があります。
今回は、このカスタムフィールドの中も含めてフリーワード検索で検索させる方法について備忘録もかねて記載します。
(なお、SQL文の知識が必要になってきます。本ブログでSQL文についての記載はしないのでわからない方は別途ネットで調べて下さい)
1.ポイント
(1)”posts_search”にフィルターフックをかけて処理を追加
(2)検索パラメータ’s’のフリーワード検索の時のみ処理を実行
(3)検索文字列を抜き出す(スペース区切りでの複数文字検索を許容)。
(4)部分一致の表現は、”%”で検索対象文字列を囲む。
(5)カスタムフィールドは、meta_valueに格納されているのでその中を確認する条件文をSQLで作成する。
(6)文字列の条件文は”LIKE”。
(6)作成したSQL文を返却する。
2.実際のソース
本処理は、フリーワード検索でカスタム投稿タイプ’products’内の”タイトル”と”カスタムフィールド”の中を検索しています。
“本文”内は検索していません。
なぜなら、カスタム投稿タイプ’products’は、商品情報となり本文が無い、タイトルとカスタムフィールドで宣言された投稿タイプであるためです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | add_filter('posts_search','custom_search_engine', 10, 2); function custom_search_engine($search, $wp_query){ global $wpdb; //wpdbクラス if (!$wp_query->is_search){ //検索処理以外は本関数から抜ける return $search; } if (!isset($wp_query->query_vars)){ //'s'による検索では無い時は抜ける return $search; } //フリーワードの検索文字列群を取り出し $seach_words = isset($wp_query->query_vars['s']) ? $wp_query->query_vars['s'] : ''; $search_words = explode(' ', $seach_words); //検索対象文字列を分割(スペース区切りが前提) if(count($search_words)>0){ $search = ''; //$searchを初期化し新しいSQL分を格納 $search .= " AND post_type = 'products'"; //カスタム投稿タイプ'products'の検索 foreach($search_words as $search_word){ //検索対象文字列を取り出し、複数条件のSQL分を作成する。 if(!empty($search_word)){ $search_word = '%'.esc_sql($search_word).'%'; //部分一致のため文字列を"%"で囲む //create sql $search .= " AND ({$wpdb->posts}.post_title LIKE '{$search_word}' OR {$wpdb->posts}.ID IN ( SELECT distinct post_id FROM {$wpdb->postmeta} WHERE meta_value LIKE '{$search_word}' ) )"; } } } return $search; } |
以上、簡単ですがフリーワード検索でカスタムフィールドも対象にしたい場合には上記のソースを参考にして頂ければと思います。
WEB DESIGN全てお任せ!ホームページ制作
RishunTradingでは、日本にはないコンセプトや高いデザイン性をもったヨーロッパ製品の輸入販売、及び、Webサイト制作事業などをおこなっております。
「全てお任せ!ホームページ制作」は、ドメイン取得からサーバー設定、レスポンシブルデザイン(スマホ、タブレット対応)、SEO対策がすべて含まれたお得なホームページを制作するサービス商品です。
運用開始後に「Webサイト運用管理サービス(保守)」と組み合わせて購入しますと、メンテナンス、更新も含めてすべて弊社で実施しますので、お客様は安心して本業に集中する事ができます。
しかもなんと、「全てお任せ!ホームページ制作」は、¥100,000!で提供しております。
本業が忙しい中小企業様に大変ご好評を頂いている商品です。
独自ドメイン取得
サーバー開設&設定
レイアウト設計
レスポンシブルデザイン
(*1)検索エンジン最適化
(SEO対策)場所Maps
お問い合わせフォーム
SSL化
各種SNS連携
運用マニュアル