неправильно работает пагинация wordpress

Всем привет, пагинация с использованием функции the_posts_pagination() неправильно работает: при клике на ссылку переходит на главную страницу.


<?php

                        // Запрашиваем продукты
                        $query = new WP_Query([
                            'post_type' => 'news',
                            'posts_per_page' => 2,
                            'paged' => get_query_var('page'),
                        ]);

                        if ($query->have_posts()) {

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

                                ?>

                                <div class="card">

                                    <div class="card__header">
                                        <h3 class="card__title  card__title--news">
                                            <a class="card__link" href="<?php the_permalink($post) ?>">
                                                <?php the_title() ?>
                                            </a>
                                        </h3>
                                    </div>

                                    <div class="card__data">
                                        <time class="card__time" datetime="<?php echo get_post_time('Y-m-d'); ?>">
                                            <?php echo get_post_time(' j F Y', false, null, true); ?>
                                        </time>
                                    </div>

                                    <div class="card__description">
                                        <span>
                                            <?php the_content() ?>
                                        </span>
                                    </div>
                                    <a class="card__detail" href="<?php the_permalink($post) ?>">Подробнее</a>
                                </div>

                                <?php
                            }

                            wp_reset_postdata();
                        }

                        echo paginate_links( [
                            'base'    => user_trailingslashit( wp_normalize_path( get_permalink() .'/%#%/' ) ),
                            'current' => max( 1, get_query_var( 'page' ) ),
                            'total'   => $query->max_num_pages,
                        ] );

                        ?>
                    </div> <!-- /.cards -->

введите сюда описание изображения


Ответы (1 шт):

Автор решения: Viktor

Ваш код для пагинации выглядит почти правильно, но есть несколько моментов, которые нужно исправить, чтобы пагинация работала корректно.

  • Использование paged вместо page:
    В WordPress для пагинации обычно используется параметр paged, а не page.

  • Правильное формирование базового URL для пагинации:
    Убедитесь, что базовый URL для пагинации формируется правильно.

Вот исправленный код:


<?php
// Запрашиваем продукты
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$query = new WP_Query([
    'post_type' => 'news',
    'posts_per_page' => 2,
    'paged' => $paged,
]);

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

        <div class="card">
            <div class="card__header">
                <h3 class="card__title  card__title--news">
                    <a class="card__link" href="<?php the_permalink($post) ?>">
                        <?php the_title() ?>
                    </a>
                </h3>
            </div>
            <div class="card__data">
                <time class="card__time" datetime="<?php echo get_post_time('Y-m-d'); ?>">
                    <?php echo get_post_time(' j F Y', false, null, true); ?>
                </time>
            </div>
            <div class="card__description">
                <span>
                    <?php the_content() ?>
                </span>
            </div>
            <a class="card__detail" href="<?php the_permalink($post) ?>">Подробнее</a>
        </div>

        <?php
    }
    wp_reset_postdata();
}

echo paginate_links( [
    'base'    => user_trailingslashit( wp_normalize_path( get_permalink() .'/%#%/' ) ),
    'current' => max( 1, get_query_var( 'paged' ) ),
    'total'   => $query->max_num_pages,
] );
?>
</div> <!-- /.cards -->
  1. Использование paged: Мы используем paged вместо page для получения текущей страницы.
  2. Проверка наличия paged: Если paged не установлен, мы устанавливаем его значение в 1.
  3. Правильное формирование базового URL: Мы используем user_trailingslashit и wp_normalize_path для формирования базового URL для пагинации.

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

→ Ссылка