質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

プラグイン

プラグイン(plug-in)は、ソフトウェアアプリケーションの機能拡張の為に開発された、一組のソフトウェアコンポーネントのことを指します。

Q&A

解決済

1回答

7949閲覧

[wordpress]search and filter proを使ってカスタムフィールドの検索をかけたい

fkshin

総合スコア12

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

プラグイン

プラグイン(plug-in)は、ソフトウェアアプリケーションの機能拡張の為に開発された、一組のソフトウェアコンポーネントのことを指します。

0グッド

0クリップ

投稿2018/02/05 08:28

前提・実現したいこと

wordpressにて、search and filter proを使用しています。
その中のSearchのフィールドを使用して検索欄を出力しました。
その検索欄で検索をかけると、カスタムフィールド内の情報からの検索が出来ていないことがわかりました。
カスタムフィールド内を検索対象にした、検索欄が作りたいです。

発生している問題・エラーメッセージ

カスタムフィールド内の情報が検索対象になっていない

試したこと1

search everythingを導入しました。
同プラグイン内の検索欄からはカスタムフィールドが検索対象になっていました。
故に、search and filter proにおいてカスタムフィールドが検索対象から除外されているのかと思っています。

試したこと2

下記コードをfunctionに入れましたが、効果はありませんでした。
(なぜ動作しなかったかは不明です…)

php

1 2/** 3 * 参考 http://wpcj.net/1363 4 */ 5function posts_search_custom_fields( $orig_search, $query ) { 6 if ( $query->is_search() && $query->is_main_query() && ! is_admin() ) { 7 // 4.4のWP_Query::parse_search()の処理を流用。(検索語の分割処理などはすでにquery_vars上にセット済のため省く) 8 global $wpdb; 9 $q = $query->query_vars; 10 $n = ! empty( $q['exact'] ) ? '' : '%'; 11 $searchand = ''; 12 if($q['search_terms']) { 13 foreach ( $q['search_terms'] as $term ) { 14 $like_op = 'LIKE'; 15 $andor_op = 'OR'; 16 $like = $n . $wpdb->esc_like( $term ) . $n; 17 // カスタムフィールド用の検索条件を追加 18 // COLLATE utf8_unicode_ciでカスタムフィールドを「ひらがな」と「カタカナ」、「全角英数」と「半角英数」を区別しないでマッチさせる 19 $search .= $wpdb->prepare( "{$searchand}(($wpdb->posts.post_title $like_op %s) $andor_op ($wpdb->posts.post_content $like_op %s) $andor_op (custom.meta_value COLLATE utf8_unicode_ci $like_op %s))", $like, $like, $like ); 20 $searchand = ' AND '; 21 } 22 } 23 if ( ! empty( $search ) ) { 24 $search = " AND ({$search}) "; 25 if ( ! is_user_logged_in() ) 26 $search .= " AND ($wpdb->posts.post_password = '') "; 27 } 28 return $search; 29 } 30 else { 31 return $orig_search; 32 } 33} 34add_filter( 'posts_search', 'posts_search_custom_fields', 10, 2 ); 35 36/** 37 * カスタムフィールド検索用のJOIN 38 */ 39function posts_join_custom_fields( $join, $query ) { 40 if ( $query->is_search() && $query->is_main_query() && ! is_admin() ) { 41 // group_concat()したmeta_valueをJOINすることでレコードの重複を除きつつ検索しやすくする 42 global $wpdb; 43 $join .= " INNER JOIN ( "; 44 $join .= " SELECT post_id, group_concat( meta_value separator ' ') AS meta_value FROM $wpdb->postmeta "; 45 // $join .= " WHERE meta_key IN ( 'test' ) "; 46 $join .= " GROUP BY post_id "; 47 $join .= " ) AS custom ON ($wpdb->posts.ID = custom.post_id) "; 48 } 49 return $join; 50} 51add_filter( 'posts_join', 'posts_join_custom_fields', 10, 2 );

###最後に
検索が重要視されるコンテンツを作成しているので、ぜひご回答いただければ幸いです。
よろしくお願いします!

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/02/05 09:05

search and filter proってどこで手に入れられますかー?
退会済みユーザー

退会済みユーザー

2018/02/05 09:11

有料だがや。金要るだがや。こりゃ持ってるモンしか分からんだがや。回答貰える確率低いと思ぜよ。
fkshin

2018/02/05 09:13

あーそうなんですね…有料だと回答率低いんですね…まあよく考えればそうですよね…これ例えば無料版だとどうですか?例えば無料版でうまく行きそうな内容を、pro版に適応させてみると言いいますか!
退会済みユーザー

退会済みユーザー

2018/02/05 09:20

どこのどれが無料版かも分からんだがや。
fkshin

2018/02/05 09:28

うう…そうですか…ありがとうございます!助かりました!
退会済みユーザー

退会済みユーザー

2018/02/05 09:31

持ってる人から回答があることを祈るだがや。
guest

回答1

0

自己解決

結局検索欄をなくして、チェックボックスによる絞り込みのみとしました。
ありがとうございました!

投稿2018/03/15 19:46

fkshin

総合スコア12

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

azusa-y

2018/11/13 04:54

時間が経っているので必要ないかもしれませんが、 私もこの件で悪戦苦闘し、 こちらのページも参考にさせていただきならが、解決に至りました。 他にも困っていらっしゃる方がいると思いますので、この場所に解決方法を残しておきます。 【search and filter proを使ってカスタムフィールドの検索を可能にする方法】 Search & Filter Proのフォーラムです。 https://searchandfilter.com/documentation/3rd-party/relevanssi/?sfref=dc Relevanssiという無料のプラグインを導入し、連携させるとできるとのことです。 https://wordpress.org/plugins/relevanssi/ Relevanssiをインストール有効させたあと、Relevanssiの設定ページにて、indexingタブを開きます。 下の方のCustom fieldsの値をプルダウンにて visibleにします。(詳しくはRelevanssi 設定方法などで検索してください。) そのあとページ上に戻り、青いボタンのうち、Build the index を押します。 処理が終わったらセーブをします。 その後search & filter pro の設定画面に行き、Settings & Defaults項目の、Adcancedタブを開きます。 そこにあるRelevanssi項目のEnableにチェックをつけて、更新します。 これで設定は完了です。 うまく行かない場合は、ブラウザキャッシュのクリアや、Relevanssiの設定タブでcustom fieldsという記載があるところなど、チェックしてみてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問