Я пытаюсь создать несколько фильтров в своих сообщениях с настраиваемыми полями.Так что в моем searchpage.php
я добавил следующее:
$args = array(
'post_type' => 'cp_course', 'numberposts' =>-1,'orderby' => 'ID', 'order' => 'ASC', 's' => $searchterm,
'meta_query' => array(
'relation' => 'AND',
array(
'key' => 'course_code',
'value' => $code,
),
array(
'key' => 'course_duration',
'value' => $duration,
)
)
);
$course = get_posts($args);
Но это не сработает, если я поставлю только $code
или только $duration
, я должен поставить их обоих из-за AND
отношение.Есть ли более простой способ, чем несколько IFs
, чтобы проверить, если, например, $code
не предоставлено, тогда фильтровать сообщения только по $duration
РЕДАКТИРОВАТЬ
Используя решение ash0ur Я использовал этот код:
$args = array(
'post_type' => 'cp_course', 'numberposts' =>-1,'orderby' => 'ID', 'order' => 'ASC', 's' => $searchterm,
'meta_query' => array(
'relation' => 'OR',
array(
'relation' => 'AND',
array(
'key' => 'course_code',
'value' => $code,
),
array(
'key' => 'course_duration',
'value' => $duration,
),
),
array(
'key' => 'course_duration',
'value' => $duration,
),
array(
'key' => 'course_code',
'value' => $code,
)
)
);
Но если я хочу расширить его, чтобы добавить дополнительные условия поиска, я получаю множество INNER JOIN
запросов в базе данных, что вызывает проблемы длясервер.Вот что я пробовал, что вызывает проблемы:
$args = array(
'post_type' => 'cp_course', 'numberposts' =>-1,'orderby' => 'ID', 'order' => 'ASC', 's' => $searchterm,
'meta_query' => array(
'relation' => 'OR',
array(
'relation' => 'AND',
array(
'key' => 'course_code',
'value' => $code,
),
array(
'key' => 'course_duration',
'value' => $duration,
),
array(
'key' => 'course_iteration_start',
'value' => $date_from,
),
array(
'key' => 'course_iteration_end',
'value' => $date_to,
),
),
array(
'key' => 'course_duration',
'value' => $duration,
),
array(
'key' => 'course_code',
'value' => $code,
)
)
);
Где course_iteration_start
и course_iteration_end
равны sub fields
(повторители) course_iteration
custom field
.