
[code]

        $venue_type = $_GET['vt'];
        $guest_count = $_GET['gc'];
        $area = $_GET['area'];
        $keyword = $_GET['s'];
    
        $the_query = new WP_Query();
    
        if($keyword){ $taxquerysp[] = array( 'taxonomy'=>'category', 'terms'=> $keyword);}
        if($keyword){ $taxquerysp[] = array( 'taxonomy'=>'post_tag', 'terms'=> $keyword);}
        $taxquerysp['relation'] = 'OR';
    
        if($venue_type){ $metaquerysp[] = array( 'key'=>'venue_type', 'value'=> $venue_type );}
        if($guest_count){ $metaquerysp[] = array( 'key'=>'guest_count', 'value'=> $guest_count );}
        $metaquerysp['relation'] = 'AND';
    
        if($metaquerysp || $area || $keyword){
          $query1 = array(
            'post_type' => 'wedding_reports',
            'tax_query' => $taxquerysp,
            'meta_query' => $metaquerysp,
            's' => $keyword
          );
          $current_articl1 = new WP_Query($query1);
        }
    
[/code]

上記のような検索を実現したいのですが、wordpressでのフリーワード検索とtaxonomyとカスタムフィールドのAND検索は可能なのでしょうか？

よろしくお願い致します。


CC BY-SA 3.0
2017-09-06T02:56:15.093
37747
2017-09-07T08:50:21.053
2017-09-06T03:08:06.790
9988
9988
question
wordpress
wordpressでのフリーワード検索とtaxonomyとカスタムフィールドのAND検索は可能なのか


AND検索は可能です。

関数:WP_Queryやget_postsは、パラメータ'tax_query'、'meta_query'、's'などが同時に指定されるとAND条件で記事データを抽出します。

wordpressがフォルダー”word”にインストールされ  
カスタムフィールド abcdef_abc に 'dog'が  
カテゴリに、a1 が 設定されている記事で  
フリーワード検索で'ねこ'が存在するデータを絞り込むなら、以下のコード実行すると確認する事が出来ると思います。

[code]

    require "word/wp-config.php";
    
    $ptype ='post';
    
    $taxonomyc =
        array(array(
            'taxonomy' => 'category',
            'field' => 'slug',
            'terms' => 'a1'
        ));
    
    $metac =
        array(
            array(
                'key' => 'abcdef_abc',
                'value' => 'dog',
            )
        );
    
    $current_articl1 = new WP_Query(array('numberposts'=> 5000, 'order'=> 'DESC', 'orderby' => 'post_date','post_type' => $ptype,'tax_query' => $taxonomyc,'meta_query' => $metac,'s'=>'ねこ'));
    $pt = get_posts(array('numberposts'=> 5000, 'order'=> 'DESC', 'orderby' => 'post_date','post_type' => $ptype,'tax_query' => $taxonomyc,'meta_query' => $metac,'s'=>'ねこ'));
    print_r($pt);
    
[/code]

WP_Query関数がパラメータを展開したSQLは以下の通りです。（$current_articl1−＞requestに入っています。）

[code]

    SELECT SQL_CALC_FOUND_ROWS  wp_posts.ID FROM wp_posts  LEFT JOIN wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id) INNER JOIN wp_postmeta ON ( wp_posts.ID = wp_postmeta.post_id ) WHERE 1=1  AND (
      wp_term_relationships.term_taxonomy_id IN (2)
    ) AND (((wp_posts.post_title LIKE '%ねこ%') OR (wp_posts.post_excerpt LIKE '%ねこ%') OR (wp_posts.post_content LIKE '%ねこ%')))  AND (wp_posts.post_password = '')  AND (
      ( wp_postmeta.meta_key = 'abcdef_abc' AND wp_postmeta.meta_value = 'dog' )
    ) AND wp_posts.post_type = 'post' AND (wp_posts.post_status = 'publish') GROUP BY wp_posts.ID ORDER BY wp_posts.post_date DESC LIMIT 0, 10
    
[/code]


CC BY-SA 3.0
2017-09-07T08:50:21.053
37780
2017-09-07T08:50:21.053
22793
37747
answer