Пагинация не работает в пользовательском шаблоне страницы
Возможный дубликат:
Пагинация не работает с пользовательским циклом
Очевидно, это очень распространенная проблема. Уже множество людей предлагали решения, но после часов поисков я так и не нашел работающего варианта. Надеюсь, кто-то сможет подсказать решение.
Я создал страницу для вывода всех записей моего пользовательского типа. Вот код моего шаблона страницы:
<?php
/*
Шаблон: страница пользовательского типа записей
*/
get_header(); ?>
<div id="primary">
<div id="content" role="main">
<?php
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$args = array(
'post_type'=>array('car','bicycle'), // Типы записей
'posts_per_page'=> 20, // Записей на страницу
'page'=>$paged, // Текущая страница
);
$the_query = new WP_Query( $args);
$num = $the_query->found_posts;
if($the_query){
if ($the_query->have_posts()) : echo $num;
while ($the_query->have_posts()) : $the_query->the_post();
echo '<li><a href="'.get_permalink().'">'.get_the_title().'</a></li>';
endwhile;
next_posts_link( 'Вперед', $the_query->max_num_pages );
previous_posts_link('Назад', $the_query->max_num_pages );
else : $return_string = 'Нет результатов';
endif; wp_reset_query(); wp_reset_postdata();
}
?>
</div><!-- #content -->
</div><!-- #primary -->
Проблема в том, что при нажатии на ссылки Вперед
или Назад
результаты запроса остаются прежними. Я заметил, что URL меняется (появляется page/2/
, page/3/
и т.д.), и found_posts()
показывает корректное количество записей на каждой странице. Все выглядит правильно, но контент не обновляется.
Я также пробовал добавить 'max_num_pages'=>2
в аргументы WP_Query, но это не помогло.
Есть идеи, в чем может быть проблема?
Попробуйте следующий вариант и посмотрите, как он работает..
<?php
global $paged;
global $wp_query;
$temp = $wp_query;
$wp_query = null;
$wp_query = new WP_Query();
$wp_query->query('posts_per_page=10&post_type=your_post_type'.'&paged='.$paged);
while ($wp_query->have_posts()) : $wp_query->the_post();
?>
<!-- здесь разместите вывод цикла: заголовок, содержимое и т.д. -->
<?php endwhile; ?>
<?php previous_posts_link('« Новые') ?>
<?php next_posts_link('Старые »') ?>
<?php
$wp_query = null;
$wp_query = $temp;
?>

@tc.k Небольшая правка, добавил две глобальные переменные. Попробуйте снова и посмотрите, как пойдет на этот раз.

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

Хорошо, наконец-то я нашёл проблему. Это была глупая ошибка, оказалось, что в аргументе нужно использовать paged
, а не page
.

Из документации http://codex.wordpress.org/Using_Permalinks
Иногда навигация на вторую (и последующие) страницы записей работает не так, как ожидается. Ваша страница может генерировать ссылку на страницу с одним из таких URI:
http://www.example.com/page/2/ http://www.example.name/category/categoryname/page/2/ http://www.example/year/month/day/page/2/ http://www.example/year/month/page/2/
Результат перехода по одной из этих ссылок — страница загружается со всеми окружающими элементами (шапкой, подвалом, боковой панелью), но вместо страницы с записями появляется сообщение об ошибке: "Извините, нет записей, соответствующих критериям."
Это происходит из-за ошибки в файле .htaccess, который генерирует WordPress. Чтобы исправить это, удалите содержимое вашего файла .htaccess и создайте его заново.
