Поиск по параметрам URL запроса
Возможный дубликат:
Пользовательская форма поиска с пустыми параметрами
Надеюсь, это быстро решится, но я застрял на этом моменте.
У меня есть несколько параметров поиска: ключевое слово, категория, страна и дата. Я настроил так, что пользователю не обязательно заполнять все фильтры. Можно оставить пустыми категорию и/или дату, и поиск покажет более широкие результаты.
Но если оставить пустым параметр страны, результаты не отображаются. С другими параметрами такой проблемы нет - они работают как ожидается. Проблема только с параметром страны.
/?s=a&cat=41&country=&monthnum=&year=
не возвращает результатов, а
/?s=a&cat=41&monthnum=&year=
возвращает.
Почему так происходит? По сути, это ведь одно и то же?
Вот мой wp_query, который просто получает записи. У меня был foreach для решения этой проблемы, но сейчас, если я его уберу, поиск работает точно так же.
$args = array('post_type' => 'post')
// Этот foreach на самом деле не нужен здесь ?
foreach(array('s', 'cat', 'country', 'monthnum', 'year') as $key) {
if(isset($_GET[$key]) && trim($_GET[$key]) !== '') {
$args[$key] = $_GET[$key];
}
}

Ваша переменная запроса country
не определена, она не входит в стандартный набор query_vars
WordPress, в отличие от monthnum
и year
, которые работают, потому что являются частью этого набора.
Вам нужно добавить свою переменную запроса, попробуйте следующее:
function new_query_var() {
global $wp;
$wp->add_query_var('country');
}
add_filter('init', 'new_query_var');
Кроме того, ваш цикл foreach
проверяет наличие этой переменной запроса, и поскольку она не установлена (например, через isset
), условие не выполняется.

Привет, спасибо за ответ. Да, насчет foreach все логично. Я добавил вашу функцию в functions.php, но ничего не изменилось. Она отказывается находить что-либо, если присутствует параметр country=
. Или я вас неправильно понял?
