2017-01-28 5 views
0

製品リストにフィルタを適用しようとしています。ユーザーはフロントエンドで選択ボックスを使用し、ボタンをクリックして製品をフィルタリングします。(Wordpress)メタクエリが存在する場合のみ適用する方法

すべての製品は独自の投稿ですので、私は投稿を取得するためにWP_Queryを使用します。たとえば、色が「赤」、素材が「プラスチック」、ブランドが「Bikon」のすべての製品が必要です。だから私は使う。

$color = "red"; 
$material = "plastic"; 
$brand = "Bikon"; 
$query = new WP_Query(array(
    'post_type'   => 'products', 
    'posts_per_page' => 6, 
    'post_status'  => 'publish', 
    'meta_query' => array(
     'relation'  => 'AND', 
     array(
      'key'  => 'color', 
      'value'  => $color, 
      'compare' => '=' 
     ), 
     array(
      'key'  => 'material', 
      'value'  => $material, 
      'compare' => '=' 
     ), 
     array(
      'key'  => 'brand', 
      'value'  => $brand, 
      'compare' => '=' 
     ) 
    ) 
)); 

これは、すべての値が設定されると正常に動作します。しかし、選択ボックスの1つだけが使用されている場合、他の2つの値は空になり、クエリは投稿を返しません。 "この値が設定されている場合にのみ、この配列をメタクエリで使用する"と言う方法はありますか?

答えて

2

あなたは、変数の定義をチェックし、それが

$query_args = array(
    'post_type'  => 'products', 
    'posts_per_page' => 6, 
    'post_status' => 'publish', 
    'meta_query'  => array(
     'relation' => 'AND', 
     array(
      'key'  => 'product_check', 
      'compare' => 'EXISTS', 
     ), 
    ), 
); 

if(isset($color) && $color) { 
    $query_args['meta_query'][] = array('key' => 'color', 'value' => $color, 'compare' => '='); 
} 

if(isset($material) && $material) { 
    $query_args['meta_query'][] = array('key' => 'material ', 'value' => $material , 'compare' => '='); 
} 

if(isset($brand) && $brand) { 
    $query_args['meta_query'][] = array('key' => 'brand ', 'value' => $brand , 'compare' => '='); 
} 

$query = new WP_Query($query_args); 
+0

が存在する場合、私はそれが理由コードのこの部分のため、または何か他のもののためですかどうかわからないんだけど、私はこの方法を使用する場合、追加のフィルタを追加することができますコードがクエリにスタックされます。 – Joris508

+0

奇妙な、私にとってそれはうまく動作し、この方法を数回使用しました。あなたはコードの完全なビューのスクリーンショットを共有できますか? –

+0

元のクエリでmeta_queryを指定している可能性があります。 フィルタリングが存在する場合にのみ追加してください - http://prntscr.com/e1is9a –

関連する問題