Я ломаю себе голову здесь. Через сообщение на этом веб-сайте мне удалось создать пользовательскую страницу архива таксономии в 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 для каждого значения в массиве, но это не может быть идеальным.
К сожалению, нет! Изменение кода и изменение 'compare' => 'IN' вместо 'compare =>' AND 'все равно приводит к получению всех сообщений вместо того, что я ожидал. – Frank