Архивная страница... ограничение постов на странице
Итак, я создал пользовательский тип записей 'testimonials', установил опцию "has archive" в "true" и создал PHP шаблон с именем "archive-testimonials.php".
Я хочу ограничить количество отображаемых постов до 5 с возможностью переключения вперед и назад для просмотра следующих 5 постов. Звучит достаточно просто, но почему-то у меня не получается это реализовать.
Вот мой цикл, который показывает все 17 отзывов:
<?php $loop = new WP_Query( array( 'pagename' => 'testimonials', 'posts_per_page' => -1 ) ); ?>
<?php while ( $loop->have_posts() ) : $loop->the_post(); ?>
<div>
<h2><?php the_title(); ?></h2>
<?php the_content(); ?>
</div>
<?php endwhile; ?>
Единственный способ показать их все вместо только 10 - это использовать 'posts_per_page' => -1. И даже без этого параметра "posts_per_page" он показывает только 10 из 17 постов.
Теперь я попробовал:
<?php $loop = new WP_Query( array( 'post_type' => 'testimonials', 'posts_per_page' => 5 ) ); ?>
<?php previous_posts_link(); ?> • <?php next_posts_link(); ?>
<?php while ( $loop->have_posts() ) : $loop->the_post(); ?>
<div>
<h2><?php the_title(); ?></h2>
<?php the_content(); ?>
</div>
<?php endwhile; ?>
Мне удается показать только пять записей, но у меня нет пагинации для перехода к следующим 5. При открытии "testimonials/page/2/" показываются те же пять записей, что и на предыдущей странице.
Что я делаю неправильно? Буду признателен за любую помощь.
Спасибо

Не создавайте новый запрос и цикл только для изменения количества записей на странице. Добавьте функцию, привязанную к pre_get_posts
, и измените нужные параметры до выполнения запроса. Этот код следует разместить в файле functions.php
вашей темы или в плагине.
function wpd_testimonials_query( $query ){
if( ! is_admin()
&& $query->is_post_type_archive( 'testimonials' )
&& $query->is_main_query() ){
$query->set( 'posts_per_page', 5 );
}
}
add_action( 'pre_get_posts', 'wpd_testimonials_query' );
Затем в шаблоне используйте обычный цикл, и пагинация будет работать как ожидается.
