Прорблема с пагинацией query_posts()
Подскажите, пожалуйста - возникла проблема с пагинацией при использование query_posts на кастомной таксономии. Дело в том, что данные для $args - беруться из $_GET запроса: т.е. на станице таксономии организована форма с "фильтрами" (стиль: doom, gothic, folk; года: 1991, 199Х, 2ХХХ; и так далее).
Эти фильтры - являються катомными таксономиями. Проставляя чекбоксы по своему вкусу - подбираеться, соответственно и нужная музыка, т.е. идёт управление выборкой результатов этого query_posts. И, надо отдать должное - всё фильтруется как надо, но при переходе на уже вторую страницу - выдаёт "Oops! That page can’t be found.", но УРЛ строки - верный:
test.loc/section/metal/page/2/?mf_doom[]=38&mf_doom[]=39&mf_folk[]=51&filters_submit=Применить фильтр
Но, к сожалению - на второй станице никаких кастомных записей уже нет, а красуеть "Oops! That page can’t be found."
Вот мой код:
global $wp_query; $tax_query_arr = array(); $tax_query_arr['relation'] = 'AND'; $tax_query_arr[] = array( 'taxonomy' => 'section', 'field' => 'id', 'terms' => $curr_tax_id ); foreach( $get_vars_arr as $slug => $terms ){ $tax_query_arr[] = array( 'taxonomy' => $slug, 'field' => 'id', 'terms' => $terms ); } $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; $args = array( 'post_type' => 'realty', 'paged' => $paged, 'order' => $order_query, 'orderby' => 'name', 'tax_query' => $tax_query_arr ); query_posts( $args );
Тут тебе нужно использовать фильтр pre_get_posts, а не query_posts. Тебе там нужно параметры запроса изменить для текущей страницы.
Благодарю.
Правда я решил пойти другим путём: вместо метода $_GET решил отправлять выбранные значения из формы - методом $_POST. А уже собранные данные записать в сессию $_SESSION[] и, потом, уже из неё же и "вынимать" выбранные значения. В итоге - пагинация вроди как заработала и с "отфильтрованными" постами.
$_SESSION[] - можно же ж использовать в сайтах на WordPress?
Можно но не рекомендуется, тем более для таких целей, когда можно легко без этого обойтись...
Эх, к сожалению ничего у меня так и не получилось с "pre_get_posts" - не один час у вас на сайте читал про этот фильтр, но, что-то так ничего и не заработало...
Хвала Небесам! Наконец-то разобрался в чём причина была. МОЖЕТ КОМУ-ТО ПРИГОДИТЬСЯ! Вообщем - всё дело было атрибутах name тега input, которые и "собирали" отмеченные пользователем показатели фильтров. Так во - НИ ПРИ КАКИХ ОБСТОЯТЕЛЬСТВАХ НЕЛЬЗЯ присваивать атрибутам name название слагов/ярлыков (slug) кастомных таксономий. Почему? - не знаю, знаю одно, как только задал атрибутам name префиксы перед подставляемыми слагами - всё заработало!!!
Более того в параметрах использовать ключ name тоже не рекомендуется он в ВП используется в URL. Вот тут список чего нельзя юзать в качестве ключей в параметрах запроса. Там как раз name есть...
В каких параметрах нельзя ключ name использовать? Пожалуйста, можете по подробнее, где нельзя указывать слаг кастомной таксономии...
В параметрах запроса: в URL чаще всего это. Например у тебя есть форма, в ней ты юзаешь поле с именем name и туда что-то передаешь, далее при отправке формы ты получаешь URL например такой:
example.com/pagename/?name=rubrika
.Так вот, так неправильно, нужно не name назвать поле, как-то еще.
Тоже самое относится к другим параметрам запроса, может где-то в коде ты меняешь параметры и указываешь в качестве ключа параметра name - это тоже запрещено!