Pagina archivio... limitare i post per pagina
Ho creato un custom post type 'testimonials' e ho impostato l'opzione "has archive" su "true" e ho un file template PHP chiamato "archive-testimonials.php".
Quello che voglio fare è limitare il numero di post mostrati a solo 5 con un'opzione avanti e indietro per passare ai successivi 5. Sembra abbastanza semplice ma per qualche motivo non riesco a farlo funzionare.
Ecco il mio loop che mi mostra tutti i 17 post testimonial:
<?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; ?>
L'unico modo per mostrare tutti i post invece di solo 10 è con 'posts_per_page' => -1. E anche senza quel "posts_per_page" mostrerà solo 10 dei 17 post.
Ora ho provato:
<?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; ?>
Riesco a mostrare solo cinque post ma non ho la paginazione per i successivi 5. Si apre semplicemente "testimonials/page/2/" e mostra gli stessi cinque della pagina precedente.
Cosa sto sbagliando? Qualsiasi aiuto è molto apprezzato.
Grazie

Non creare una nuova query e un loop solo per modificare i post per pagina. Aggiungi una funzione collegata a pre_get_posts
e modifica i parametri che desideri prima che la query venga eseguita. Questo codice dovrebbe essere inserito nel file functions.php
del tuo tema o in 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' );
Poi nel template puoi eseguire il normale loop e la paginazione funzionerà come previsto.
