Пагинация (на статической главной странице) всегда показывает одни и те же записи.

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

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

if ( is_front_page() ) {    
    $paged = get_query_var( 'page' ) ? get_query_var( 'page' ) : 1;
    $args = array(
        'post_type'      => 'post',
        'orderby'        => 'date',
        'order'          => 'DESC',
        'posts_per_page' => 1,
        'cat'            => '4',
        'page'           => $paged,
    ); 
    $q = new WP_Query( $args );
    if ( $q->have_posts() ) { 
        while ( $q->have_posts() ) {
            $q->the_post();
            ?>
            <div> .... </div>
            <?php
        }
        //пагинация
        wp_reset_query();
    }
}

Но все время у меня одни и те же записи на разных страницах: domain.com/page/2/ и так далее.
Что я делаю не так?
Как это исправить?

Спасибо за любую помощь.

https://codex.wordpress.org/Creating_a_Static_Front_Page

Статические главные страницы не предназначены для разбивки на страницы. Ни одна из функций ссылок предыдущей / следующей страницы WordPress не работает с статической главной страницей.
Пагинация на статической главной странице использует переменную запроса page, а не переменную paged. Смотрите WP_Query для деталей.


https://codex.wordpress.org/Class_Reference/WP_Query

Отображение записей с текущей страницы на статической главной странице:

$paged = ( get_query_var('page') ) ? get_query_var('page') : 1;
$query = new WP_Query( array( 'paged' => $paged ) );

.

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

Решение проблемы с пагинацией на статической главной странице WordPress

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

Понимание проблемы

Когда вы используете функцию is_front_page() для отображения постов на статической главной странице, важно правильно установить переменную, отвечающую за пагинацию. Ваш текущий код использует get_query_var('page'), но для пагинации необходимо использовать переменную paged.

Что нужно изменить в вашем коде?

Ниже представлен исправленный код, который должен помочь вам организовать правильную пагинацию на статической главной странице:

if ( is_front_page() ) {
    $paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1; // Изменяем 'page' на 'paged'
    $args = array(
        'post_type'      => 'post',
        'orderby'        => 'date',
        'order'          => 'DESC',
        'posts_per_page' => 1,
        'cat'            => '4',
        'paged'          => $paged, // Указываем пагинацию правильно
    ); 
    $q = new WP_Query( $args );
    if ( $q->have_posts() ) { 
        while ( $q->have_posts() ) {
            $q->the_post();
            ?>
            <div> .... </div>
            <?php
        }

        // Пагинация
        $big = 999999999; // огромное число для замены в Pagenavi
        echo paginate_links( array(
            'base'    => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
            'format'  => '?paged=%#%',
            'current' => max( 1, get_query_var('paged') ),
            'total'   => $q->max_num_pages,
        ) );

        wp_reset_postdata(); // Сброс глобальных переменных
    }
}

Основные изменения

  1. Переменная пагинации: Замените get_query_var('page') на get_query_var('paged'). Это важно для обеспечения правильной работы пагинации в WordPress.

  2. Добавление аргумента ‘paged’: Убедитесь, что в вашем массиве $args присутствует ‘paged’ для передачи текущей страницы в ваш запрос.

  3. Использование wp_reset_postdata(): Вместо wp_reset_query() используйте wp_reset_postdata(), так как это более рекомендованный способ сброса данных после пользовательского запроса WP_Query.

  4. Пагинация: Используйте функцию paginate_links() для отображения кнопок пагинации, что обеспечит лучшую навигацию между записями.

Заключение

С введением этих изменений ваша статическая главная страница должна начать корректно отображать посты с пагинацией. Обратите внимание на важность правильного использования переменных пагинации в зависимости от контекста (статическая страница против обычной страницы с записями).

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

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

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