Paginazione su WP_query non mostra i link di navigazione
Sto avendo problemi ad aggiungere la paginazione a una pagina. Sto usando WP_query
e vorrei mostrare 4 post per pagina. La query base sembra funzionare correttamente ma devo aver tralasciato qualcosa riguardo la paginazione.
// La query per 4 post
$paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;
$query = new WP_Query();
$query->query('showposts=4'.'&paged='.$paged);
if ( $query->have_posts() ) :
while ( $query->have_posts() ) : $query->the_post(); ?>
<div class="post">
<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
<p class="author">di <?php the_author(); ?></p>
</div>
<?php endwhile; ?>
<!-- fine del loop -->
<nav>
<?php previous_posts_link('« Post più recenti') ?>
<?php next_posts_link('Post più vecchi »') ?>
</nav>
<?php wp_reset_postdata();
// Se non ci sono risultati
else : ?>
<p><?php _e( 'Spiacente, nessun post corrisponde ai criteri.' ); ?></p>
<?php endif; ?>
Ho impostato la variabile per la paginazione all'inizio in questo modo:
$query->query('showposts=4'.'&paged='.$paged);
Sto includendo la navigazione della paginazione in questo modo:
<nav>
<?php previous_posts_link('« Post più recenti') ?>
<?php next_posts_link('Post più vecchi »') ?>
</nav>
Ma ottengo solo HTML vuoto <nav></nav>
- senza errori, e non riesco a capire cosa mi sta sfuggendo.
Modifica: Come suggerito ho aggiornato in questo modo:
$paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;
$args = array(
'posts_per_page' => 4,
'paged' => $paged,
);
$query = new WP_Query( $args );
e ho aggiornato il link del pulsante in:
<?php next_posts_link( 'Post più vecchi »', $query->max_num_pages ); ?>
Continuo a non vedere il link della paginazione.

Per favore non usare showposts
, è stato sostituito da posts_per_page
molto tempo fa.
Personalmente aggiungerei gli argomenti a WP_Query
come mostrato sotto, inoltre la paginazione dovrebbe funzionare come mostrato di seguito:
$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
$args = array(
'posts_per_page' => 4,
'paged' => $paged,
);
$the_query = new WP_Query( $args );
global $wp_query;
// Memorizza l'oggetto query di default in una variabile temporanea
$tmp_query = $wp_query;
// Ora azzeralo completamente
$wp_query = null;
// Ripopola la variabile globale con la nostra query personalizzata
$wp_query = $the_query;
if ( $the_query->have_posts() ) :
while ( $the_query->have_posts() ) : $the_query->the_post();
// codice del loop
endwhile;
previous_posts_link( '« Articoli più recenti' );
next_posts_link( 'Articoli meno recenti »', $the_query->max_num_pages );
wp_reset_postdata();
else :
// codice se non ci sono articoli
endif;
// Ripristina l'oggetto query originale
$wp_query = null;
$wp_query = $tmp_query;
Che è lo stesso della domanda e risposta Come sistemare la paginazione per loop personalizzati? che ti ho linkato da @ChipBennett.
Un'altra nota, se questo è in un template di pagina che funziona come front page statica, devi usare la variabile di query page
invece di paged
:
$paged = ( get_query_var( 'page' ) ) ? get_query_var( 'page' ) : 1;

Ciao. Questo è all'interno di una pagina standard, non una pagina frontale statica. Purtroppo il codice che hai fornito non funziona :(

@Francesca Hai letto la domanda che ho linkato nel mio commento? In particolare la parte relativa a »Hack the main query object«.

Di nulla. Nessun problema, tra l'altro all'inizio non avevo aggiunto il "main query hack", che è il motivo per cui ora funziona. @Francesca

Una buona pratica è ottenere il valore posts_per_page da WordPress. Puoi modificare questo valore nel menu di amministrazione di WordPress.
$page = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
if(!$page)
$page = ( get_query_var( 'page' ) ) ? get_query_var( 'page' ) : 1;
$posts_per_page = get_option( 'posts_per_page' );
$query = new WP_Query( array(
'posts_per_page' => $posts_per_page,
'paged' => $page,
'post_status' => 'publish',
'orderby' => 'title',
'order' => 'ASC',
) );
while ( $query->have_posts() ) {
$query->the_post();
// Codice per l'Output
}
