Отсутствуют навигационные ссылки в пагинации WP_query

4 сент. 2014 г., 16:23:55
Просмотры: 29.2K
Голосов: 6

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

// Запрос для 4 записей
$paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;
$query = new WP_Query();
$query->query('showposts=4'.'&paged='.$paged);

if ( $query->have_posts() ) : 
    while ( $query->have_posts() ) : $query->the_post(); ?>
    <div class="post">
      <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
      <p class="author">автор: <?php the_author(); ?></p>
    </div>
    <?php endwhile; ?>
    <!-- конец цикла -->
    <nav>
        <?php previous_posts_link('&laquo; Новые записи') ?>
        <?php next_posts_link('Старые записи &raquo;') ?>
    </nav>

        <?php wp_reset_postdata();

        // Если результатов нет
        else : ?>
            <p><?php _e( 'Извините, записей не найдено.' ); ?></p>
        <?php endif; ?>

Я установил переменную для пагинации в начале следующим образом:

$query->query('showposts=4'.'&paged='.$paged);

И включил навигацию пагинации так:

<nav>
    <?php previous_posts_link('&laquo; Новые записи') ?>
    <?php next_posts_link('Старые записи &raquo;') ?>
</nav>

Но я получаю только пустой HTML <nav></nav> - без ошибок, и я не могу понять, что я упускаю.

Редактирование: Согласно предложению, я обновил код следующим образом:

        $paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;
        $args = array(
            'posts_per_page' => 4,
            'paged'          => $paged,
        );
        $query = new WP_Query( $args );

и обновил ссылку кнопки на:

<?php next_posts_link( 'Старые записи &raquo;', $query->max_num_pages ); ?>

Я все еще не вижу ссылок пагинации.

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

Попробуйте это: next_posts_link('Старые записи &raquo;', $query->max_num_pages)

Howdy_McGee Howdy_McGee
4 сент. 2014 г. 16:50:45

Возможно, вам стоит ознакомиться с Как исправить пагинацию для пользовательских циклов?.

Nicolai Grossherr Nicolai Grossherr
4 сент. 2014 г. 17:17:42
Все ответы на вопрос 2
7
13

Пожалуйста, не используйте showposts, так как он был заменен на posts_per_page уже давно.

Лично я бы добавил аргументы в WP_Query, как показано ниже, дополнительно пагинация должна работать следующим образом:

$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
$args = array(
    'posts_per_page' => 4,
    'paged'          => $paged,
);
$the_query = new WP_Query( $args );

global $wp_query;
// Сохраняем стандартный объект запроса во временную переменную
$tmp_query = $wp_query;
// Теперь полностью очищаем его
$wp_query = null;
// Заполняем глобальную переменную нашим пользовательским запросом
$wp_query = $the_query;

if ( $the_query->have_posts() ) : 
    while ( $the_query->have_posts() ) : $the_query->the_post();
        // код цикла
    endwhile;

    previous_posts_link( '&laquo; Новые записи' );
    next_posts_link( 'Старые записи &raquo;', $the_query->max_num_pages );
    wp_reset_postdata();

else :
    // код, если записи не найдены 
endif;

// Восстанавливаем оригинальный объект запроса
$wp_query = null;
$wp_query = $tmp_query;

Это то же самое, что и в вопросе Как исправить пагинацию для пользовательских циклов?, на который я вам ссылался, от @ChipBennett.

Еще одно замечание: если это шаблон страницы, работающий как статическая главная страница, необходимо использовать переменную запроса page вместо paged:

$paged = ( get_query_var( 'page' ) ) ? get_query_var( 'page' ) : 1;
4 сент. 2014 г. 16:53:31
Комментарии

Привет. Это обычная страница, а не статическая главная. К сожалению, предоставленный вами код не работает :(

Francesca Francesca
4 сент. 2014 г. 17:43:11

Ваш код должен работать +1

Pieter Goosen Pieter Goosen
4 сент. 2014 г. 17:53:46

@Francesca Вы прочитали вопрос, на который я ссылался в своем комментарии? Особенно часть, связанную с »Взломом основного объекта запроса«.

Nicolai Grossherr Nicolai Grossherr
4 сент. 2014 г. 17:57:06

Спасибо, это действительно работает. Извините, я не заметил ваше исправление.

Francesca Francesca
4 сент. 2014 г. 18:47:02

Не за что. Ничего страшного, кроме того, сначала я не добавил »main query hack«, поэтому сейчас оно и работает. @Francesca

Nicolai Grossherr Nicolai Grossherr
4 сент. 2014 г. 18:50:30

Теперь это не работает. Выдает столько ошибок

sheetal sheetal
4 мая 2018 г. 10:13:33

@sheetal Всё работает, я просто перепутал названия переменных, но исправил это.

Nicolai Grossherr Nicolai Grossherr
5 мая 2018 г. 12:49:10
Показать остальные 2 комментариев
0

Хорошей практикой является получение значения posts_per_page из WordPress. Это значение можно изменить в админ-панели WordPress.

$page = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
if(!$page)
    $page = ( get_query_var( 'page' ) ) ? get_query_var( 'page' ) : 1;

$posts_per_page = get_option( 'posts_per_page' );

$query = new WP_Query( array(
    'posts_per_page' => $posts_per_page,  // Количество записей на странице
    'paged'          => $page,            // Номер текущей страницы
    'post_status'    => 'publish',        // Только опубликованные записи
    'orderby'        => 'title',          // Сортировка по заголовку
    'order'          => 'ASC',            // По возрастанию
) );

while ( $query->have_posts() ) {
    $query->the_post();

    // Код для вывода записей
}
17 авг. 2017 г. 09:00:03