Поиск по параметрам 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=. Или я вас неправильно понял?
zilj