Пагинация не работает в пользовательском шаблоне страницы

23 окт. 2012 г., 21:27:40
Просмотры: 14.4K
Голосов: 2

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

Очевидно, это очень распространенная проблема. Уже множество людей предлагали решения, но после часов поисков я так и не нашел работающего варианта. Надеюсь, кто-то сможет подсказать решение.

Я создал страницу для вывода всех записей моего пользовательского типа. Вот код моего шаблона страницы:

<?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, но это не помогло.

Есть идеи, в чем может быть проблема?

1
Комментарии

Пожалуйста, поищите ответ перед тем, как задавать вопросы. Этот вопрос уже много раз задавали и на него отвечали.

Chip Bennett Chip Bennett
24 окт. 2012 г. 00:27:01
Все ответы на вопрос 2
5

Попробуйте следующий вариант и посмотрите, как он работает..

<?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('&laquo; Новые') ?>
    <?php next_posts_link('Старые &raquo;') ?>

<?php 
  $wp_query = null; 
  $wp_query = $temp; 
?>
24 окт. 2012 г. 00:00:13
Комментарии

Пробовал, но тоже не работает.

dev-jim dev-jim
24 окт. 2012 г. 17:41:29

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

Adam Adam
24 окт. 2012 г. 17:43:56

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

dev-jim dev-jim
24 окт. 2012 г. 17:50:45

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

dev-jim dev-jim
24 окт. 2012 г. 18:26:37

@tc.k Да, всё верно. Я тоже не заметил пропущенную букву d в вашем аргументе, но да, как правило, нужно использовать 'paged='.$paged. Рад, что теперь у вас всё работает. Всего наилучшего.

Adam Adam
24 окт. 2012 г. 18:37:50
2

Из документации 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 и создайте его заново.

23 окт. 2012 г. 21:33:55
Комментарии

Я прочитал это всего 2 дня назад ;)

Mridul Aggarwal Mridul Aggarwal
23 окт. 2012 г. 21:36:58

@Mridul Aggarwal, попробовал ваш метод, но всё равно не работает.

dev-jim dev-jim
23 окт. 2012 г. 21:47:24