2017-11-23 8 views
0

私は現在、すべての検索オプションが一致していない場合でも、最小限の結果に基づいて検索クエリを作成するソリューションを検討しています。WP_query最小掲載結果

理想的な状況。

私はカスタムポストタイプを作って、色とサイズの異なる2つの靴を追加しました。 WP_Query()で「青い靴」と「サイズ8」を照会しています。私がこのクエリを実行すると、私はサイズ8の青色の靴が3点しか得られません。今度は、サイズ8の靴を7個追加して合計10個の靴を得たいと思います。

アドバンスドカスタムフィールドと組み合わせてWordpress内でこれを行う方法はありますか?

WP_query()メソッドに基づいてカスタムWP_Queryを作成しました。最初のクエリに基づいてすべての結果を格納する配列を作成し、その配列の長さが10に等しくない場合、追加のクエリを実行します。

これまでのところは良いが、その後、私は重複して結果を取得:

を=>私はすべてのサイズ8つの靴はすでにを含む3すでに見つかっ青色の靴のサイズが8で、そして再び2番目のクエリで取得最初のクエリの靴が見つかりました。

下記のコードを参照してください。

$shoe_array = array(); 

$args = array(
    'numberposts' => -1, 
    'post_type'  => 'my_shoes', 
    'meta_query' => array( 
     'relation'  => 'AND',   
     array(
      'key'  => 'size', 
      'value'  => 8, 
      'compare' => 'LIKE' 
     ), 
     array(
      'key'  => 'color', 
      'value'  => 'blue', 
      'compare' => 'LIKE' 
     ), 
    ), 
    'orderby'   => 'date', 
    'order'    => 'DESC' 
); 

$shoes = new WP_Query($args); 
$posts = $shoes->posts; 

foreach($posts as $post) { 

    array_push($shoe_array, $post->post_name); 

} 

if (count($shoe_array) > 9) { 

    echo 'Result of found shoes: '; 
    print_r($shoe_array); 

} else { 

    $args = array(
     'numberposts' => -1, 
     'post_type'  => 'my_shoes', 
     'meta_query' => array( 
      'relation'  => 'AND', 
      array(
       'key'  => 'size', 
       'value'  => 8, 
       'compare' => 'LIKE' 
      ) 
     ), 
     'orderby'   => 'date', 
     'order'    => 'DESC' 
    ); 

    $extra_shoes = new WP_Query($args); 
    $posts = $extra_shoes->posts; 

    foreach($posts as $post) { 

     array_push($shoe_array, $post->post_name); 

    } 

    echo 'Result of found shoes: '; 
    print_r($shoe_array); 

} 

誰もが「よりスマートに」クエリを作成する方法を知っていますか?

必要に応じて質問がありましたらお気軽にお問い合わせください。ありがとう! :-)

私はそのコードはあなたを助けることを願って
+0

青ではありません、私はあなたが結合結果を望んでいることを理解3つの実績+他の7つの結果は、あなたが望むものですか? – SouhailV

+0

@SouhailVはい、それはまさに私が達成したいことです。他の結果は、「ほぼ同じ」なので、この場合はメタ値「青」がありません。 – 0611nl

答えて

1

<?php 

$shoe_array = array(); 

$args = array(
    'numberposts' => -1, 
    'post_type'  => 'my_shoes', 
    'meta_query' => array( 
     'relation'  => 'AND',   
     array(
      'key'  => 'size', 
      'value'  => 8, 
      'compare' => 'LIKE' 
     ), 
     array(
      'key'  => 'color', 
      'value'  => 'blue', 
      'compare' => 'LIKE' 
     ), 
    ), 
    'orderby'   => 'date', 
    'order'    => 'DESC', 
    'fields'   => 'ids' 
); 

$shoes = get_posts($args) ; 

$count10 = 10 - count($shoes) ; 

$args2 = array(
     'numberposts' => -1, 
     'post_type'  => 'my_shoes', 
     'meta_query' => array( 
      'relation'  => 'AND', 
      array(
       'key'  => 'size', 
       'value'  => 8, 
       'compare' => 'LIKE' 
      ) 
     ), 
     'orderby'   => 'date', 
     'order'    => 'DESC', 
     'post__not_in' => $shoes, 
     'posts_per_page' => $count10 , 
     'fields'   => 'ids' 
    ); 

    $shoes8 = get_posts($args2) ; 

    $post_ids = array_merge($shoes, $shoes8); 

    print_r($post_ids); 

?> 
+0

多くのありがとう@souhailV、 "post__not_in"変数がこの問題の鍵でした!あなたが私をその方向に向けることができてうれしい!宜しくお願いします! – 0611nl

+0

あなたは歓迎です@ 0611nl、言及ありがとうございます私の答えは受け入れられている – SouhailV

0

だから追加色に等しい状態が

$args = array(
    'numberposts' => -1, 
    'post_type'  => 'my_shoes', 
    'meta_query' => array( 
     'relation'  => 'AND', 
     array(
      'key'  => 'size', 
      'value'  => 8, 
      'compare' => 'LIKE' 
     ) 
     array(
      'key'  => 'color', 
      'value'  => 'blue', 
      'compare' => '!=' 
     ), 
    ), 
    'orderby'   => 'date', 
    'order'    => 'DESC' 
); 
関連する問題