2017-01-28 10 views
0

Я пытаюсь применить фильтры в списке продуктов. Пользователи будут использовать поля выбора на лицевой панели и нажмите кнопку, чтобы фильтровать продукты.Как применять мета-запрос (Wordpress), если он существует

Каждый товар - это собственный пост, поэтому я использую WP_Query для получения сообщений. Например, я хочу, чтобы все продукты имели цвет «красный», материал «пластик» и бренд «Бикон». Поэтому я использую;

$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' => '=' 
     ) 
    ) 
)); 

И это будет работать нормально, если будет установлено каждое значение get. Но если используется только один из полей выбора, остальные два значения будут пустыми, и запрос не вернет никаких сообщений. Есть ли способ сказать «использовать этот массив только в мета-запросе, если это значение установлено»?

ответ

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

Возможно, вы shoudnt укажите meta_query в исходном запросе. Так что добавьте его, только если какая-либо фильтрация существует - http://prntscr.com/e1is9a –