サポート » 使い方全般 » タームのみによる検索について

  • 解決済 worker_bee

    (@worker_bee)


    はじめてフォーラムを利用させていただきます。

    カスタム投稿タイプ(estate)で作成した記事を検索対象とし、「文字列+ターム」or「文字列のみ」or「タームのみ」で検索結果を絞り込めるようにしたいと考え、以下のコードをfunctions.phpに記述しました。

    function search_only_post( $query ) {
    if ( is_admin() || ! $query->is_main_query() )
    return;
    if ($query->is_search()) {
    $query->set( ‘post_type’, ‘estate’ );
    $query->set( ‘posts_per_page’, 5);
    $query->set( ‘tax_query’,array(
    ‘relation’ => ‘OR’,
    array(
    ‘taxonomy’ => ‘websites_tag’,
    ‘terms’ =>$_GET[“tag”],
    ‘field’ => ‘slug’,
    ‘operator’=> ‘AND’,
    )
    )
    );
    }
    }
    add_action( ‘pre_get_posts’, ‘search_only_post’ );

    function custom_search($search, $wp_query ) {
    if ( isset($wp_query->query[‘s’]) ) $wp_query->is_search = true;
    return $search;
    }
    add_filter(‘posts_search’,’custom_search’, 10, 2);

    function custom_request($query)
    {
    if (!(is_admin()))
    {
    if(!empty($query[‘tag’]) && array_key_exists(‘s’, $query)){
    $query[‘tag’] = implode(‘,’, $query[‘tag’]);
    }
    }
    return $query;
    }
    add_filter( ‘request’, ‘custom_request’ );

    その結果、「文字列のみ」と「文字列+ターム」による検索は成功しました。しかしながら「タームのみ」の検索だけ、function search_only_postの中の$query->is_search()の条件を満たしていないらしく、デフォルトの投稿で作成した記事を検索対象とし、結果を出力してしまいます。

    「タームのみ」の検索でも検索対象をカスタム投稿タイプ(estate)で作成した記事にすることは可能でしょうか。アドバイス等いただけましたら、幸いです。

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

    (@hissy)

    parse_queryにフックして、タームのパラメーターがある時に is_search を真に変えてやれば解決すると思います。似たようなことをやりましたのでご参考までに
    http://notnil-creative.com/blog/archives/1638

    トピック投稿者 worker_bee

    (@worker_bee)

    hissyさん

    アドバイスありがとうございます。
    参考サイトをもとにparse_queryにフックした結果、
    望み通りの検索ができるようになりました!
    誠にありがとうございます。

    以下が自分が追加したコードです。
    同じ症状でお悩みの方ご参考までに。
    function my_parse_query( $query ) {
    $term=$query->get(‘term’);
    if ( empty($term)) {
    $query->is_search = true;
    }
    return $query;
    }
    add_filter( ‘parse_query’, ‘my_parse_query’);

    トピック投稿者 worker_bee

    (@worker_bee)

    ごめんなさい。
    もう一度確認してみたのですが、上記のコードですと、検索結果としててでくる記事は
    正しいものの、記事の内容を表示することができなくなってしまいました。

    恐らく、「文字列やタームによる検索」と「投稿の編集画面から投稿内容を表示する」を区別する条件を書く必要があると思うのですが、その判別をすることは可能でしょうか。
    助言等いただけましたら、幸いです。

    トピック投稿者 worker_bee

    (@worker_bee)

    たびたびお騒がせして申し訳ありません。
    以下のコードで実現できました。
    アドバイスありがとうございました。

    function my_parse_query( $query ) {

    if ($query->get(‘tag’) && !$query->get(‘s’)) {
    $query->is_search = true;
    }
    return $query;
    }
    add_filter( ‘parse_query’, ‘my_parse_query’);

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「タームのみによる検索について」には新たに返信することはできません。