WordPress как на ладони
wordpress jino

Прорблема с пагинацией 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 );
1
Богдан
5 месяцев назад
  • 0
    Kama5410

    Тут тебе нужно использовать фильтр pre_get_posts, а не query_posts. Тебе там нужно параметры запроса изменить для текущей страницы.

    Богадн 5 месяцев назад

    Благодарю.
    Правда я решил пойти другим путём: вместо метода $_GET решил отправлять выбранные значения из формы - методом $_POST. А уже собранные данные записать в сессию $_SESSION[] и, потом, уже из неё же и "вынимать" выбранные значения. В итоге - пагинация вроди как заработала и с "отфильтрованными" постами.

    $_SESSION[] - можно же ж использовать в сайтах на WordPress?

    Kama 5 месяцев назад

    Можно но не рекомендуется, тем более для таких целей, когда можно легко без этого обойтись...

    Богадн 5 месяцев назад

    Эх, к сожалению ничего у меня так и не получилось с "pre_get_posts" - не один час у вас на сайте читал про этот фильтр, но, что-то так ничего и не заработало...

    add_action('pre_get_posts', 'get_posts_search_filter');
    function get_posts_search_filter( $query ){
    	if ( !is_admin() ) {
    		$query->set('post_type', 'realty' );
    		$query->set('paged', $paged );
    		$query->set('orderby', 'name' );
    		$query->set('order', $order_query );
    		$query->set('tax_query', $tax_query_arr );
    	}
    }
    Богдан 5 месяцев назад

    Хвала Небесам! Наконец-то разобрался в чём причина была. МОЖЕТ КОМУ-ТО ПРИГОДИТЬСЯ! Вообщем - всё дело было атрибутах name тега input, которые и "собирали" отмеченные пользователем показатели фильтров. Так во - НИ ПРИ КАКИХ ОБСТОЯТЕЛЬСТВАХ НЕЛЬЗЯ присваивать атрибутам name название слагов/ярлыков (slug) кастомных таксономий. Почему? - не знаю, знаю одно, как только задал атрибутам name префиксы перед подставляемыми слагами - всё заработало!!!

    Kama 5 месяцев назад

    Более того в параметрах использовать ключ name тоже не рекомендуется он в ВП используется в URL. Вот тут список чего нельзя юзать в качестве ключей в параметрах запроса. Там как раз name есть...

    Богдан 5 месяцев назад

    В каких параметрах нельзя ключ name использовать? Пожалуйста, можете по подробнее, где нельзя указывать слаг кастомной таксономии...

    Kama 5 месяцев назад

    В параметрах запроса: в URL чаще всего это. Например у тебя есть форма, в ней ты юзаешь поле с именем name и туда что-то передаешь, далее при отправке формы ты получаешь URL например такой: site.ru/pagename/?name=rubrika.

    Так вот, так неправильно, нужно не name назвать поле, как-то еще.

    Тоже самое относится к другим параметрам запроса, может где-то в коде ты меняешь параметры и указываешь в качестве ключа параметра name - это тоже запрещено!

    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация