2016-06-06 2 views
0

Я ломаю себе голову здесь. Через сообщение на этом веб-сайте мне удалось создать пользовательскую страницу архива таксономии в WordPress. Теперь я пытаюсь добавить к нему динамические фильтры флажков, но я не могу заставить meta_query работать.Dynamic meta_query

Эта строка кода работает, как будто я хотел бы, чтобы она работала;

$query = array(
    'post_type' => 'company', 
    'posts_per_page' => 999, 
    'order' => 'ASC', 
    'tax_query' => array(
     array(
      'taxonomy' => 'company_category', 
      'field' => 'slug', 
      'terms' => $al_cat_slug 
     ) 
    ), 
    'meta_query' => array (
     array (
      'key' => 'company_method', 
      'value' => 'Online', 
      'compare' => 'LIKE', 
     ) 
    ) 
); 

Как когда-либо, это не будет:

$query = array(
    'post_type' => 'company', 
    'posts_per_page' => -1, 
    'order' => 'ASC', 
    'tax_query' => array(
     array(
      'taxonomy' => 'company_category', 
      'field' => 'slug', 
      'terms' => $al_cat_slug 
     ) 
    ), 
); 

$al_tax_post_qry = new WP_Query($query); 

$meta_query = $al_tax_post_qry->get('meta_query'); 

$name = 'company_method'; 
$value = explode(',', $_GET[ $name ]); 

$meta_query[] = array(
     'key'  => $name, 
     'value'  => $value, 
     'compare' => 'LIKE', 
); 

$al_tax_post_qry->set('meta_query', $meta_query); 

Все, что я вхожу в URL, он продолжает находить все результаты, и это не будет фильтровать, как и первый. A print_r ($ meta_query); дает мне:

Array ([0] => Array ([key] => company_method [value] => Array ([0] => Online) [compare] => LIKE)) 

Редактировать 07-06-2016 // 9:00 После прочтения комментария о том, что я должен использовать «IN», я экспериментировал немного дальше, и, когда я использую его жгутов сам запрос, он не дает мне никаких результатов. Кажется, что «IN» - проблема. Поле, которое я запрашиваю, является полем «Расширенные пользовательские поля», чтобы оно могло иметь какое-то отношение к нему? Однако примеры на их веб-сайте также используют тот же метод.

не работает:

$query = array(
    'post_type' => 'company', 
    'posts_per_page' => -1, 
    'order' => 'ASC', 
    'tax_query' => array(
     array(
      'taxonomy' => 'company_category', 
      'field' => 'slug', 
      'terms' => $al_cat_slug 
     ) 
    ), 
    'meta_query' => array (
     'relation'  => 'AND', 
     array (
      'key' => 'company_method', 
      'value' => array('online', 'orange', 'apple'), 
      'compare' => 'IN', 
     ) 
    ), 
); 

Рабочая:

 $query = array(
    'post_type' => 'company', 
    'posts_per_page' => -1, 
    'order' => 'ASC', 
    'tax_query' => array(
     array(
      'taxonomy' => 'company_category', 
      'field' => 'slug', 
      'terms' => $al_cat_slug 
     ) 
    ), 
    'meta_query' => array (
     'relation'  => 'AND', 
     array (
      'key' => 'company_method', 
      'value' => 'online', 
      'compare' => 'LIKE', 
     ) 
    ), 
); 

При желании я мог бы создать запись массива в meta_query для каждого значения в массиве, но это не может быть идеальным.

ответ

1

Если вы определяете свой $ meta_query value как массив, вы должны изменить свой оператор compare. IN и NOT IN являются конкретными массивами.

Попробуйте это:

$meta_query[] = array(
    'key'  => $name, 
    'value'  => $value, 
    'compare' => 'IN', 
); 

Надеется, что это помогает!

+0

К сожалению, нет! Изменение кода и изменение 'compare' => 'IN' вместо 'compare =>' AND 'все равно приводит к получению всех сообщений вместо того, что я ожидал. – Frank

Смежные вопросы