Условные аргументы для WP_Query и tax_query в зависимости от наличия значения в $somevar
20 июн. 2012 г., 04:09:11
Просмотры: 27.2K
Голосов: 8
Я создал новый запрос для произвольного типа записей 'courses'. Результаты затем фильтруются с помощью tax_query, запрашивая 3 пользовательские таксономии, соответствующие одному или нескольким ID терминов. Они передаются со страницы поиска.
Вот код, который работает нормально до настоящего момента:
// Давайте эмулируем отправленные ID из виджета поиска курсов
// со статическими ID терминов для каждой пользовательской таксономии
$search_course_area = array(65, 62);
$search_course_level = array(117); //52 для дальнейшей фильтрации
$search_course_mode = array(54, 56);
//Начинаем новый запрос
$query = new WP_Query(
array(
//Получаем ВСЕ записи курсов
'post_type' => 'course',
'posts_per_page' => '-1',
//Фильтруем таксономии по ID, переданным из виджета поиска курсов
'tax_query' => array(
//Устанавливаем условие отношения для фильтров
//в данном случае мы используем AND, так как это явно
//установлено пользователем при поиске
'relation' => 'AND',
//Сначала проверяем и получаем course-area на основе ID
array(
'taxonomy' => 'course-area',
'field' => 'id',
'terms' => $search_course_area
),
//И снова для второй таксономии
array(
'taxonomy' => 'study-levels',
'field' => 'id',
'terms' => $search_course_level
),
//Наконец проверяем и получаем course-mode на основе ID
array(
'taxonomy' => 'course-mode',
'field' => 'id',
'terms' => $search_course_mode
),
)
)
);
То, с чем у меня возникли небольшие трудности - это если передается пустой массив, это, очевидно, нарушит запрос и не вернет результатов.
Какой был бы самый чистый способ решить эту проблему?
Все ответы на вопрос
2
3
Вы можете определить аргументы за пределами инициализации WP_Query
:
<?php
$tax_query = array('relation' => 'AND');
if (isset($search_course_area))
{
$tax_query[] = array(
'taxonomy' => 'course-area',
'field' => 'id',
'terms' => $search_course_area
);
}
if (isset($search_course_level))
{
$tax_query[] = array(
'taxonomy' => 'study-levels',
'field' => 'id',
'terms' => $search_course_level
);
}
if (isset($search_course_mode))
{
$tax_query[] = array(
'taxonomy' => 'course-mode',
'field' => 'id',
'terms' => $search_course_mode
);
}
$query = new WP_Query(
array(
//Извлекаем ВСЕ записи курсов
'post_type' => 'course',
'posts_per_page' => '-1',
//Фильтруем таксономии по id, переданным из виджета поиска курсов
'tax_query' => $tax_query,
)
);
?>

jessica
1.4K
20 июн. 2012 г. 04:44:55
0
На случай, если кто-то увидит это сейчас, если у вас несколько условий в вашем экземпляре запроса, вам следует обернуть вашу переменную в другой массив.. что-то вроде:
$meta_query = array();
if ( 0 == $current_user->ID ) {
$meta_query[] = array(array(
'key' => 'restrito_para_visualizar',
'value' => '1',
'compare' => '!=',
'type' => 'CHAR',
),
array(
'key' => 'ativo',
'value' => '1',
'compare' => '=',
'type' => 'NUMERIC',
));
} else {
$meta_query[] = array(
array(
'key' => 'ativo',
'value' => '1',
'compare' => '=',
'type' => 'NUMERIC',
));
}

Wesley Andrade
11
3 окт. 2018 г. 23:51:48
Похожие вопросы
0
ответов
3
ответов
2
ответов