Поиск по параметрам URL запроса

15 окт. 2012 г., 14:47:50
Просмотры: 17K
Голосов: 0

Возможный дубликат:
Пользовательская форма поиска с пустыми параметрами

Надеюсь, это быстро решится, но я застрял на этом моменте.

У меня есть несколько параметров поиска: ключевое слово, категория, страна и дата. Я настроил так, что пользователю не обязательно заполнять все фильтры. Можно оставить пустыми категорию и/или дату, и поиск покажет более широкие результаты.

Но если оставить пустым параметр страны, результаты не отображаются. С другими параметрами такой проблемы нет - они работают как ожидается. Проблема только с параметром страны.

/?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];
    }
}
3
Комментарии

Мое лучшее предположение — что параметр country зарезервирован в WordPress. Изменение "country" на что-то вроде "abc_country" может решить проблему.

Mridul Aggarwal Mridul Aggarwal
15 окт. 2012 г. 22:56:39

Логичное предположение, но это не так

zilj zilj
16 окт. 2012 г. 11:54:11

Ответ найден в отдельном <A href="http://wordpress.stackexchange.com/questions/67790/custom-search-form-with-empty-parameters">посте</a>:

zilj zilj
17 окт. 2012 г. 14:23:11
Все ответы на вопрос 1
3

Ваша переменная запроса 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), условие не выполняется.

15 окт. 2012 г. 16:02:08
Комментарии

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

zilj zilj
15 окт. 2012 г. 16:11:39

Временно замените блок if { } на var_dump($key); - что вы видите?

Adam Adam
15 окт. 2012 г. 16:15:07

Я получил это string(1) "s" string(3) "cat" string(7) "country" string(8) "monthnum" string(4) "year" из этих параметров URL /?s=a&cat=41&country=&monthnum=10&year=2012

zilj zilj
15 окт. 2012 г. 16:18:40