WordPress не отображает ссылки на пагинацию

Вопрос или проблема

В моем файле WordPress Index.html я извлекаю 3 последние записи, используя

<?php query_posts('posts_per_page=3') ?>

<?php while(have_posts()) : the_post(); ?>

   //остальные данные, связанные с записью

<?php endwhile; wp_reset_query();  ?>
<?php do_action('show_navigation');

после этого я хочу получить следующие 3 или предыдущие 3 записи, и для этого я пробую

if ( ! function_exists( 'theme_content_navigation' ) ) {
    function theme_content_navigation( ) {
        global $wp_query;

        if ( $wp_query->max_num_pages > 1 ) { ?>
            <nav class="navigation" role="navigation">
                <div class="nav-previous"><?php next_posts_link( '<' ); ?></div>
                <div class="nav-next"><?php previous_posts_link( '>' ); ?></div>
            </nav>
        <?php 
        }
    }
}



add_action('show_navigation', 'theme_content_navigation');

этот код в functions.php.

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

я решил свою проблему, удалив

<?php query_posts('posts_per_page=3') ?>

и попробовал ограничить записи в Настройки->Чтение. Спасибо

Ответ или решение

Вопрос о том, почему в WordPress не отображаются ссылки на пагинацию, часто возникает у разработчиков и пользователей, пытающихся настроить вывод постов на своих страницах. Приведённый вами код демонстрирует использование функции query_posts, которая может создавать определенные сложности в плане пагинации, особенно если вы используете её неправильно. Давайте разберёмся, как правильно организовать вывод постов и пагинацию.

Анализ проблемы

В вашем случае вызов функции query_posts с параметром posts_per_page=3 устанавливает переменные цикла, что может привести к путанице в понимании текущего состояния глобального запроса $wp_query. Когда вы вызываете query_posts, это заменяет основной сценарий запроса, из-за чего функции пагинации, такие как next_posts_link и previous_posts_link, не могут правильно работать. В результате, вы не видите ссылки навигации, так как фактически ваш запрос не знает, на какой странице данных он находится.

Решение проблемы

Лучше использовать классическую функцию WP_Query или get_posts для выполнения подобных запросов. Рассмотрим, как исправить ваш код.

  1. Измените запрос на WP_Query:

    Замените ваш запрос query_posts на WP_Query, чтобы гарантировать корректное управление объектом запроса.

    <?php
    $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; // Получаем текущую страницу
    $args = array(
       'posts_per_page' => 3,
       'paged' => $paged
    );
    
    $the_query = new WP_Query($args);
    
    if ($the_query->have_posts()) : 
       while ($the_query->have_posts()) : $the_query->the_post();
           // Здесь выводите данные постов
       endwhile;
    
       // Пагинация
       if ($the_query->max_num_pages > 1) {
           echo '<nav class="navigation">';
           echo '<div class="nav-previous">' . get_next_posts_link('Предыдущие', $the_query->max_num_pages) . '</div>';
           echo '<div class="nav-next">' . get_previous_posts_link('Следующие') . '</div>';
           echo '</nav>';
       }
    else :
       echo 'Посты не найдены.';
    endif;
    
    wp_reset_postdata(); // Восстанавливаем глобальный объект поста
    ?>
  2. Вывод пагинации через get_next_posts_link и get_previous_posts_link:

    Данная конструкция автоматически генерирует ссылки на предыдущие и следующие посты, основываясь на количестве постов и текущей странице.

  3. Общие советы:

    • Убедитесь, что в панели администрирования WordPress в разделе «Настройки > Чтение» у вас установлена правильная настройка для отображения количества постов на странице.
    • Проверяйте правильность настройки постоянных ссылок в разделе «Настройки > Постоянные ссылки», так как неверные настройки могут также вызвать проблемы с пагинацией.
    • Избегайте использования query_posts, так как это может вызвать конфликты с глобальными переменными и нарушить работу пагинации.

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

Оцените материал
Добавить комментарий

Капча загружается...