Почему на странице архива с пагинацией дублируются посты?
Сайт на wordpress
У меня есть страница архивная для произвольной типы записи (custom type post), на ней вывотся посты.
Если отключить пагинацию и вывести все посты, то все корректно без дублей.
Если я добавляю пагинацию, то те посты которые внизу страницы, дублируются на новой.
Почему так происходит я не понял.
Дублируется один и тот же пост (Тумилович Ольга)
Хотя шаблон вывода архива в полне себе обычный:
<div class="col-md-9 col-12 page__content"> <div class="row"> <?php if ( have_posts() ) : ?> <?php /* Start the Loop */ while ( have_posts() ) : the_post(); ?> <div class="col-md-3 col-6 doctor-archive "> <a href="<?php the_permalink(); ?>"> <?php if( has_post_thumbnail() ) {?> <img src="<?php echo the_post_thumbnail_url(); ?>" /> <?php } else { ?> <img alt="<?php the_title() ?>" src="/wp-content/uploads/2022/06/screenshot_1-3.jpg" /> <?php } ?> </a> <div style="line-height: 1.3em; min-height: 71px;"><strong><?php the_field('speczialnost_vracha') ?></strong></div> <a href="<?php the_permalink(); ?>"><?php the_title() ?></a> </div> <?php endwhile; endif; ?> </div> <?php the_posts_pagination(); ?> </div> |
<div class="col-md-9 col-12 page__content"> <div class="row"> <?php if ( have_posts() ) : ?> <?php /* Start the Loop */ while ( have_posts() ) : the_post(); ?> <div class="col-md-3 col-6 doctor-archive "> <a href="<?php the_permalink(); ?>"> <?php if( has_post_thumbnail() ) {?> <img src="<?php echo the_post_thumbnail_url(); ?>" /> <?php } else { ?> <img alt="<?php the_title() ?>" src="/wp-content/uploads/2022/06/screenshot_1-3.jpg" /> <?php } ?> </a> <div style="line-height: 1.3em; min-height: 71px;"><strong><?php the_field('speczialnost_vracha') ?></strong></div> <a href="<?php the_permalink(); ?>"><?php the_title() ?></a> </div> <?php endwhile; endif; ?> </div> <?php the_posts_pagination(); ?> </div>
Дополнительно:
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Сам шаблон цикла выглядит нормально. Дубли на страницах пагинации обычно появляются не из-за
while ( have_posts() ), а из-за нестабильной сортировки или вмешательства в главный запрос:pre_get_posts, плагин сортировки, meta query,offset, одинаковые значения поля сортировки.Частая причина: сортировка по meta value, где у нескольких записей одинаковое значение. MySQL не обязан держать стабильный порядок, поэтому одна запись может попасть на границу первой и второй страницы. Добавьте вторичную сортировку по ID или дате.
add_action('pre_get_posts', function ($query) { if (is_admin() || ! $query->is_main_query() || ! is_post_type_archive('doctor')) { return; } $query->set('posts_per_page', 12); $query->set('orderby', [ 'menu_order' => 'ASC', 'ID' => 'ASC', ]); });
Если где-то используется
offset, уберите его: обычная пагинация WordPress сoffsetчасто дает пропуски и дубли, если дополнительно не пересчитыватьfound_posts. Также проверьте, не выводится ли часть записей отдельным запросом перед основным циклом безpost__not_in.Для диагностики временно выведите ID в карточке. Если один и тот же ID появляется на разных страницах, смотрите параметры SQL-запроса и все хуки
pre_get_postsпо проекту.