Задать вопрос

Возможно ли подключить работающую пагинацию на странице с выводом постов кастомного типа?

Создана собственная тема на WordPress (6.0.1), т.е. натянута собственная верстка на CMS. Создан собственный тип постов через register_post_types(). Тип постов - articles, slug изменен через rewrite на "полезные_статьи".

Для вывода постов создана отдельная страница, куда посты выводятся посредством WP_Query. URL этой страницы совпадет со slug-ом типа поста (т.е. и slug, и URL = 'полезные_статьи'). И вроде все работает, но когда начинаешь подключать пагинацию - сталкиваешься с проблемой. Если подключить пагинацию через paginate_links(), то она отобразится, но работать должным образом не будет - переход на любую из страниц пагинации будет выдавать нам 404 страницу. При этом, если мы меняем slug типа постов, или URL страницы, например, на 'статьи' (т.е. делаем их различающимися) - то пагинация начинает работать верно!

Можно было бы все оставить так, однако при переходе на страницу конкретного поста данного типа в URL мы будем видеть то, что указано в slug (например, '/полезные_статьи/название_статьи/'), тогда как страница, куда наши посты выводятся, будет иметь URL '/статьи/'. Нелогично, может сбить с толку, да и наверняка могут быть вопросы у поисковиков.

По большому счету, вопрос в следующем: как правильно подключить пагинацию к странице с выводом постов кастомного типа через WP_Query? Все описанное в интернет уже попробовал, где-то встречал мнение, что пагинацию к кастомным постам вообще подключить нельзя. Где я ошибаюсь?

UPD 22.08.22. Добавил пример кода.

<div class="articles-list row">
    <?php
    $current = absint(max(1, get_query_var( 'paged' ) ? get_query_var( 'paged' ) : get_query_var( 'page' )));
    $query = new WP_Query([
        'post_type'      => 'articles',
        'posts_per_page' => 9,
        'paged'          => $current,
    ]);
    if ( $query->have_posts() ) {
         while ( $query->have_posts() ) {
            $query->the_post(); ?>
                <div class="col-lg-6 articles-item">
                    <div class="content">
                        <div class="pic">
                            <a href="<?php the_permalink() ?>">
                                <img src="<?php the_field("article_pic_sqr"); ?>" class="img-fluid">
                            </a>
                        </div>
                        <div class="preview">
                            <div class="title">
                                <a href="<?php the_permalink() ?>"><?php the_title(); ?></a>
                            </div>
                            <div class="description"><?php the_excerpt() ?></div>
                            <a href="<?php the_permalink() ?>" class="basic-button basic-button--white">Читать статью</a>
                        </div>
                    </div>
                </div>
                <?php
                }
                wp_reset_postdata();
                }?>
                <div class="pagination">
                    <?php
                    // Выводим пагинацию, если записей больше запрошенного количества
                    echo paginate_links([
                        'prev_next' => true,
                        'prev_text' => __( '&laquo;' ),
                        'next_text' => __( '&raquo;' ),
                        'total'   => $query->max_num_pages,
                        'current' => $current,
                        ])
                        ?>
                </div>
</div>
  • Вопрос задан
  • 78 просмотров
Подписаться 1 Простой 4 комментария
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы