Página de archivo... limitando entradas por página
He creado un tipo de entrada personalizada 'testimonials' y configuré la opción "has archive" como "true" y tengo un archivo de plantilla PHP llamado "archive-testimonials.php".
Lo que quiero hacer es limitar el número de entradas mostradas a solo 5 con una opción de siguiente y anterior para ir hacia adelante y atrás entre los siguientes 5. Suena bastante fácil pero por alguna razón no puedo hacer que funcione.
Aquí está mi bucle que me muestra todas las 17 entradas de testimonios:
<?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; ?>
La única forma en que mostrará todos en lugar de solo 10 es con 'posts_per_page' => -1. E incluso sin ese "posts_per_page" solo mostrará 10 de las 17 entradas.
Ahora he intentado:
<?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; ?>
Puedo hacer que muestre solo cinco pero no tengo paginación para los siguientes 5. Simplemente abre "testimonials/page/2/" y muestra los mismos cinco que la página anterior.
¿Qué estoy haciendo mal? Cualquier ayuda es muy apreciada.
Gracias

No crees una nueva consulta y bucle solo para alterar las publicaciones por página. Añade una función enganchada a pre_get_posts
y modifica los parámetros que desees antes de que se ejecute la consulta. Esto iría en el archivo functions.php
de tu tema o en un plugin.
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' );
Luego, en la plantilla, ejecutas el bucle normal y la paginación funciona como se espera.
