サポート » 使い方全般 » カスタムフィールドを検索対象にした場合、記事が無限ループしてしまう

  • 解決済 esusi

    (@esusi)


    http://notnil-creative.com/blog/archives/1638

    こちらのサイトを参考にfunctions.phpに

    function my_search_join( $join, $query ) {
        if ( is_admin() || ! $query->is_main_query() )
            return $join;
    
        global $wpdb;
        if( $query->is_search() ) {
            $join .= " LEFT JOIN $wpdb->postmeta ON "
                . "$wpdb->posts.ID = $wpdb->postmeta.post_id ";
        }
        return $join;
    }
    function my_search_where( $where, $query ) {
        if ( is_admin() || ! $query->is_main_query() )
            return $where;
    
        global $wpdb;
        if ( $query->is_search() ) {
            $where = preg_replace(
                "/\(\s*$wpdb->posts\.post_title\s+LIKE\s*(\'[^\']+\')\s*\)/",
                "($wpdb->posts.post_title LIKE $1) OR ($wpdb->postmeta.meta_value LIKE $1)",
                $where
            );
        }
        return $where;
    }
    add_filter( 'posts_join', 'my_search_join', 10, 2 );
    add_filter( 'posts_where', 'my_search_where', 10, 2 );

    と記述し既存のサーチフォームからカスタムフィールドの値も検索対象に含めさせることができたのですが、掲載サイトにもある通りカスタムフィールド以外の値でヒットさせたときに該当記事が無限ループし困っています。

    色々と調べてみたのですが原因がわからず、こちらで質問させていただきたく思います。

    search everythingなどのプラグインもありますが、動作状況が良くないのとなるべくプラグインに依存させない形で実現させたく思っています。

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • モデレーター Takuro Hishikawa

    (@hissy)

    「カスタムフィールド以外の値でヒットさせたときに該当記事が無限ループ」とはどういうことですか。

    トピック投稿者 esusi

    (@esusi)

    お世話になります。
    サイト上でkeitahfulさんがコメントされてる現象と全く一緒です。
    仕様が変わってでの現象のようですね。

    回避させるようにいろいろと試してるのですがうまくいかなく困っています。

    モデレーター Takuro Hishikawa

    (@hissy)

    あー、時間があればと言いつつ調べてなかった。あとで見ます

    function my_search_distinct( $distinct, $query ){
    	if ( is_admin() || !$query->is_main_query() ){
    		return $distinct;
    	}
    	if ( $query->is_search() ){
    		return 'DISTINCT';
    	}
    	return $distinct;
    }
    add_filter( 'posts_distinct', 'my_search_distinct', 10, 2 );
    

    こんな感じのものを追記してみてはどうでしょうか。

    トピック投稿者 esusi

    (@esusi)

    ありがとうございます!
    無事そちらのコード追記で正常なループにすることができました。
    重複コードの削除という形とは盲点でした。

    Takuro Hishikawaさん、x743さん、非常に助かりました。
    一番スマートなコードがこちらだったのでどうしても使いたかったのです。
    参考にさせて頂いてます。ありがとうございました。

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • トピック「カスタムフィールドを検索対象にした場合、記事が無限ループしてしまう」には新たに返信することはできません。