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

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

ただいまの
回答率

90.49%

  • WordPress

    9096questions

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

  • プラグイン

    541questions

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

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

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 2,313

fkshin

score 4

 前提・実現したいこと

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

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

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

 試したこと1

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

 試したこと2

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

/**
 * 参考 http://wpcj.net/1363
 */
function posts_search_custom_fields( $orig_search, $query ) {
    if ( $query->is_search() && $query->is_main_query() && ! is_admin() ) {
        // 4.4のWP_Query::parse_search()の処理を流用。(検索語の分割処理などはすでにquery_vars上にセット済のため省く)
        global $wpdb;
        $q = $query->query_vars;
        $n = ! empty( $q['exact'] ) ? '' : '%';
        $searchand = '';
        if($q['search_terms']) {
            foreach ( $q['search_terms'] as $term ) {
                $like_op  = 'LIKE';
                $andor_op = 'OR';
                $like = $n . $wpdb->esc_like( $term ) . $n;
                // カスタムフィールド用の検索条件を追加
                // COLLATE utf8_unicode_ciでカスタムフィールドを「ひらがな」と「カタカナ」、「全角英数」と「半角英数」を区別しないでマッチさせる
                $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 );
                $searchand = ' AND ';
            }
        }
        if ( ! empty( $search ) ) {
            $search = " AND ({$search}) ";
            if ( ! is_user_logged_in() )
                $search .= " AND ($wpdb->posts.post_password = '') ";
        }
        return $search;
    }
    else {
        return $orig_search;
    }
}
add_filter( 'posts_search', 'posts_search_custom_fields', 10, 2 );

/**
 * カスタムフィールド検索用のJOIN
 */
function posts_join_custom_fields( $join, $query ) {
    if ( $query->is_search() && $query->is_main_query() && ! is_admin() ) {
        // group_concat()したmeta_valueをJOINすることでレコードの重複を除きつつ検索しやすくする
        global $wpdb;
        $join .= " INNER JOIN ( ";
        $join .= " SELECT post_id, group_concat( meta_value separator ' ') AS meta_value FROM $wpdb->postmeta ";
        // $join .= " WHERE meta_key IN ( 'test' ) ";
        $join .= " GROUP BY post_id ";
        $join .= " ) AS custom ON ($wpdb->posts.ID = custom.post_id) ";
    }
    return $join;
}
add_filter( 'posts_join', 'posts_join_custom_fields', 10, 2 );

最後に

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • Sammo_Hung

    2018/02/05 18:26

    説明にcustom fieldと書いてないだがや。PRO版の所にCustom Fieldsと書いてあるだがや。無料版じゃ無理だがや。 https://www.designsandcode.com/forums/forum/search-filter-pro/support/ プラグインのサポートで尋ねるのが手堅いだがや。

    キャンセル

  • fkshin

    2018/02/05 18:28

    うう…そうですか…ありがとうございます!助かりました!

    キャンセル

  • Sammo_Hung

    2018/02/05 18:31

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

    キャンセル

回答 1

check解決した方法

0

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/11/13 13: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という記載があるところなど、チェックしてみてください。

    キャンセル

同じタグがついた質問を見る

  • WordPress

    9096questions

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

  • プラグイン

    541questions

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