Задать вопрос

Как реализовать постраничную навигацию при использовании фильра записей по произвольным полям в WordPress?

Доброго времени суток. Попытаюсь максимально подробно описать проблему. Есть archive с пользовательским типом записей:
<?php if ($_GET && !empty($_GET)) { go_filter(); } ?>
				<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
				<!-- Здесь располагается любой код, который выводится для статьи -->
				
				<?php endwhile; ?>
				<!-- Сюда добавим постраничную навигацию -->
				
						<?php custom_pagination(); ?>
					
				<?php else: ?>
				<!-- Здесь выводится что-либо, в случае, если статьи не найдены -->
				
				
				
				<?php endif; ?>

Есть фильтр, который прописан в function.php темы:
function go_filter() { // наша функция
	$args = array(); // подготовим массив 
	$args = array( 'posts_per_page' => $_GET['pages'] ); // вывод количества записей
	//$args = array( 'post_type' => 'demoshop' ); 
	$args['meta_query'] = array('relation' => 'AND'); // отношение между условиями, у нас это "И то И это", можно ИЛИ(OR)
	global $wp_query; // нужно заглобалить текущую выборку постов

	if ($_GET['lang_demo'] != '') { // если передана фильтрация по разделу
		$args['meta_query'][] = array( // пешем условия в meta_query
			'key' => 'lang_demo', // название произвольного поля
			'value' => $_GET['lang_demo'] // переданное значение произвольного поля
			);
	}

	if ($_GET['janr_demo'] != '') { // если передана фильтрация по разделу
		$args['meta_query'][] = array( // пешем условия в meta_query
			'key' => 'janr_demo', // название произвольного поля
			'value' => $_GET['janr_demo'] // переданное значение произвольного поля
			);
	}
	
	if ($_GET['pol_demo'] != '') { // если передана фильтрация по разделу
		$args['meta_query'][] = array( // пешем условия в meta_query
			'key' => 'pol_demo', // название произвольного поля
			'value' => $_GET['pol_demo'] // переданное значение произвольного поля
			);
	}
		
	query_posts(array_merge($args,$wp_query->query)); // сшиваем текущие условия выборки стандартного цикла wp с новым массивом переданным из формы и фильтруем
}

Вот html фильтра:
<!--<span>Показывать по:</span>
				 <ul class = "filtr_pages">
						<li><label><input name="pages" value="4" type="radio">4</label></li>
						<li><label><input name="pages" value="8" type="radio">8</label></li>
						<li><label><input name="pages" value="-1" type="radio">Все</label></li>
					</ul>-->
					<span>Сортировать по:</span>
					<select name = "lang_demo">
						<option value="">Языку</option>
						<option value="Русский">Русский</option>
						<option value="Английский">Английский</option>
						<option value="Украинский">Украинский</option>
					</select>
					<select name = "janr_demo">
						<option value="">Жанру</option>
						<option value="POP">POP</option>
						<option value="ROCK">ROCK</option>
						<option value="JAZZ">JAZZ</option>
						<option value="BLUES">BLUES</option>
						<option value="НАРОДНАЯ">НАРОДНАЯ</option>
						<option value="FOLK">FOLK</option>
						<option value="ШАНСОН">ШАНСОН</option>
						<option value="HIP-HOP">HIP-HOP</option>
					</select>
					<select name = "pol_demo">
						<option value="">Полу</option>
						<option value="Мужская">Мужская</option>
						<option value="Женская">Женская</option>
					</select>

Когда использую фильтр и раскомментирую выбор вывода количества записей - постраничная навигация появляется, но стоит перейти на следующую страницу - ошибка 404. Помогите решить проблему. Уже несколько дней ищу решение. Вот посты, которым я руководствовался при написании фильтра: dontforget.pro/wordpress/filtr-postov-po-proizvoln... . Вот что я нашел о пагинации, но не смог объединить - у меня выдавал белый экран Почему не работает пагинация WordPress? . На сколько подробно смог описать проблему.
  • Вопрос задан
  • 924 просмотра
Подписаться 2 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 2
HeadOnFire
@HeadOnFire
PHP, Laravel & WordPress Evangelist
1. Никогда не используйте query_posts. В родной же документации даже написано жирным, query_posts = проблемы с пагинацией!
2. Для реализации фильтра используйте хук pre_get_posts, в нем забирайте ваши переменные из урл с помощью get_query_var() а не обычным $_GET (WordPress его не любит)
Ответ написан
Комментировать
trampick
@trampick
Веб-разработчик
Как вариант использовать этот плагин для пагинации
В вызов функции пагинации можно передать запрос
<?php
        $recent  = 'Сюда нужно разместить запрос';
        wp_pagenavi(array('query' => $recent));
        ?>

Я только не уверен что ссылки сохранит GET параметры. Т.е. при переходе на 2 страницу параметры фильтра сбросятся. Тогда придется самому допиливать плагин:)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы