Pagina archivio... limitare i post per pagina

17 mar 2015, 22:31:26
Visualizzazioni: 20.9K
Voti: 4

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(); ?> &bull; <?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

0
Tutte le risposte alla domanda 1
1
19

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.

17 mar 2015 22:54:28
Commenti

Ha funzionato perfettamente. Non sono nuovo a WordPress ma non sono neanche lontanamente esperto come altri. Era qualcosa con cui stavo lottando ieri e non riuscivo a farlo funzionare. Ma ho appena imparato qualcosa di nuovo... Grazie per avermelo insegnato.

agon024 agon024
18 mar 2015 16:14:52