Как упростись цепочку условий для фильтра на wordpress?
У меня есть каталог фильмов на wordpress, где в метатегах постов хранится информация о жанрах, рейтинге и т.п.
Я сделал возможность фильтровать по рейтингу (число), жанру (строка) или по умолчанию только по id (число) - это работает, но получается нагромождение из простыни условий.
Не могу придумать, как можно упростить цепочку условий, особенно если понадобится добавить новые параметры для фильтра
if (isset($rating) || isset($genre)) {
if (isset($rating) && isset($genre)) {
$query = new WP_Query(array(
'meta_query' => array(
'relation' => 'AND',
array(
'key' => 'film_rating',
'value' => $rating,
),
array(
'key' => 'film_kind',
'value' => $genre,
),
array(
'key' => 'film_id',
'value' => $films,
'compare' => 'IN'
),
),
'post_type' => 'post',
'post_status' => 'publish',
'posts_per_page' => -1
));
} else if (isset($rating)) {
$query = new WP_Query(array(
'meta_query' => array(
'relation' => 'AND',
array(
'key' => 'film_rating',
'value' => $rating,
),
array(
'key' => 'film_id',
'value' => $films,
'compare' => 'IN'
),
),
'post_type' => 'post',
'post_status' => 'publish',
'posts_per_page' => -1
));
} else if (isset($genre)) {
$query = new WP_Query(array(
'meta_query' => array(
'relation' => 'AND',
array(
'key' => 'film_kind',
'value' => $genre,
),
array(
'key' => 'film_id',
'value' => $films,
'compare' => 'IN'
),
),
'post_type' => 'post',
'post_status' => 'publish',
'posts_per_page' => -1
));
}
} else {
$query = new WP_Query(array(
'meta_query' => array(
array(
'key' => 'film_id',
'value' => $films,
'compare' => 'IN'
),
),
'post_type' => 'post',
'post_status' => 'publish',
'posts_per_page' => -1
));
}
Ответы (1 шт):
Автор решения: Вася
→ Ссылка
С подсказкой @Simon решил вот так:
$args = array(
'post_type' => 'post',
'post_status' => 'publish',
'posts_per_page' => -1
);
$args['meta_query'] = array(
'relation' => 'AND',
array(
'key' => 'film_id',
'value' => $films,
'compare' => 'IN'
)
);
if ((isset($rating) && !empty($rating))) {
$args['meta_query'][] = array(
'key' => 'film_rating',
'value' => $rating
);
}
if ((isset($genre)) && !empty($genre)) {
$args['meta_query'][] = array(
'key' => 'film_kind',
'value' => $genre
);
}
$query = new WP_Query($args);