Как добавить пагинацию к пользовательскому циклу в WordPress?

25 сент. 2015 г., 21:48:22
Просмотры: 18.9K
Голосов: 1

Ребята! Уверен, для вас это раз плюнуть, но я пытаюсь добавить пагинацию к своему циклу. Пробовал разные коды, которые нашел, пагинация появляется, но на 2, 3 и других страницах отображается тот же контент, что и на первой. Как лучше всего решить эту проблему с моим текущим кодом?

<?php
    $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; // Получаем текущий номер страницы
    $recentPosts = new WP_Query(array(
        'posts_per_page' => 5,
        'paged' => $paged // Передаем номер страницы в запрос
    ));
?>
<?php while ($recentPosts->have_posts()) : $recentPosts->the_post(); ?>
    <article>
        <!-- Содержимое поста -->
    </article>
<?php endwhile; ?>

<?php
// Добавляем пагинацию
the_posts_pagination(array(
    'prev_text' => __('&laquo; Назад'), // Текст для кнопки "Назад"
    'next_text' => __('Вперед &raquo;'), // Текст для кнопки "Вперед"
    'before_page_number' => '<span class="meta-nav screen-reader-text">' . __('Страница') . ' </span>'
));
?>

Заранее спасибо за помощь.

0
Все ответы на вопрос 3
3

Скорее всего, это происходит из-за использования пользовательского шаблона страницы. Попробуйте следующее. Я прокомментировал шаги по ходу дела. Надеюсь, это поможет.

<?php 
  // получаем текущую страницу
  $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;

  // исправления пагинации перед циклом
  $temp =  $query;
  $query = null;

  // пользовательский цикл с использованием WP_Query
  $query = new WP_Query( array( 
    'post_status' => 'publish',
    'orderby' => 'date',
    'order' => 'ASC' 
  ) ); 

 // устанавливаем пагинацию нашего запроса в $paged
 $query -> query('post_type=post&posts_per_page=5'.'&paged='.$paged);

 if ( $query->have_posts() ) : 
   while ( $query->have_posts() ) : $query->the_post();
    ?>
      <li>
        <?php if ( has_post_thumbnail()) : ?>
          <?php the_post_thumbnail();?>
        <?php endif; ?>
        <div class="someclass" >
            <h2><?php the_title(); ?></h2> 
            <?php the_content(); ?>
        </div> 
      </li>
  <?php endwhile;?>

  <?php // передаем max_num_pages, которое равно общему количеству страниц ?>
  <div class="pagenav">
    <div class="alignleft"><?php previous_posts_link('Предыдущие', $query->max_num_pages) ?></div>
    <div class="alignright"><?php next_posts_link('Следующие', $query->max_num_pages) ?></div>
  </div>

<?php endif; ?>

<?php // сбрасываем настройки, установленные выше перед циклом
$query = null; $query = $temp; ?>
26 сент. 2015 г. 02:32:22
Комментарии

По какой-то причине он все еще возвращает контент с первой страницы для всех страниц. Это такое странное поведение.

Paulo Gabriel Paulo Gabriel
26 сент. 2015 г. 03:20:17

Какой шаблон вы используете для этого цикла?

amespower amespower
26 сент. 2015 г. 04:18:53

Не стандартный... Я создал новый шаблон страницы под названием gallery, чтобы возвращать только featured image и permalinks.

Paulo Gabriel Paulo Gabriel
26 сент. 2015 г. 18:03:49
3

Существует несколько способов реализации пагинации. Вот один из них:

<?php $query = new WP_Query( array( 'posts_per_page' => 5 ) ); ?>

<?php while ($query->have_posts()) : $query->the_post(); ?>
   <article>
      <h2><a href="<?php the_permalink(); ?>" rel="bookmark" title="Постоянная ссылка на <?php the_title_attribute(); ?>"><?php the_title(); ?></a></h2>
   <article>
<?php endwhile; ?>

<div class="nav-previous alignleft"><?php next_posts_link( 'Предыдущие записи' ); ?></div>
<div class="nav-next alignright"><?php previous_posts_link( 'Новые записи' ); ?></div>

Конечно, это не будет работать, если ваш WP_Query настроен неправильно.

25 сент. 2015 г. 23:19:43
Комментарии

Обратите внимание, что параметр "showposts" был объявлен устаревшим начиная с WordPress 2.1 (то есть в далёкие времена).

CK MacLeod CK MacLeod
26 сент. 2015 г. 00:10:45

Я обновил ваш код, но он всё равно не работает. :/

Paulo Gabriel Paulo Gabriel
26 сент. 2015 г. 01:09:29

Вы читали страницу кодекса про пагинацию? В частности эту часть: https://codex.wordpress.org/Pagination#Adding_the_.22paged.22_parameter_to_a_query

shanebp shanebp
26 сент. 2015 г. 01:39:19
1

В моём случае тип записи - 'news_events', пагинация будет отображаться после каждых 4 заголовков постов.

$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$news_events = array( 'post_type' => 'news_events', 'posts_per_page' => 4, 'paged' => $paged);
$wp_query = new WP_Query( $news_events );
if ( $wp_query->have_posts() ) : ?>
    <?php while ( $wp_query->have_posts() ) : $wp_query->the_post();?>
          <?php the_title(); echo "<br/>"; ?>
    <?php endwhile; ?>
    <nav>
      <?php previous_posts_link('« Новые',$wp_query->max_num_pages); ?>
      <?php next_posts_link('Старые »',$wp_query->max_num_pages); ?>
    </nav>
    <?php wp_reset_postdata(); ?>                           
    <?php else : ?>
        <p><?php _e( 'Извините, в данный момент нет новостных событий.', 'theme' ); ?></p>
<?php endif; ?>
26 сент. 2015 г. 08:00:31
Комментарии

Пожалуйста, добавьте объяснение к этому фрагменту кода.

fuxia fuxia
26 сент. 2015 г. 08:39:52