Paginazione su WP_query non mostra i link di navigazione

4 set 2014, 16:23:55
Visualizzazioni: 29.2K
Voti: 6

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('&laquo; Post più recenti') ?>
        <?php next_posts_link('Post più vecchi &raquo;') ?>
    </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('&laquo; Post più recenti') ?>
    <?php next_posts_link('Post più vecchi &raquo;') ?>
</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 &raquo;', $query->max_num_pages ); ?>

Continuo a non vedere il link della paginazione.

2
Commenti

Prova questo: next_posts_link('Older posts &raquo;', $query->max_num_pages)

Howdy_McGee Howdy_McGee
4 set 2014 16:50:45

Potresti dare un'occhiata a Come sistemare l'impaginazione per loop personalizzati?.

Nicolai Grossherr Nicolai Grossherr
4 set 2014 17:17:42
Tutte le risposte alla domanda 2
7
13

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( '&laquo; Articoli più recenti' );
    next_posts_link( 'Articoli meno recenti &raquo;', $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;
4 set 2014 16:53:31
Commenti

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

Francesca Francesca
4 set 2014 17:43:11

Il tuo codice dovrebbe funzionare +1

Pieter Goosen Pieter Goosen
4 set 2014 17:53:46

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

Nicolai Grossherr Nicolai Grossherr
4 set 2014 17:57:06

Grazie, questo funziona. Scusa se non avevo visto la tua modifica.

Francesca Francesca
4 set 2014 18:47:02

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

Nicolai Grossherr Nicolai Grossherr
4 set 2014 18:50:30

Non funziona più. Genera così tanti errori

sheetal sheetal
4 mag 2018 10:13:33

@sheetal Funziona, ho solo sbagliato i nomi delle variabili, l'ho sistemato.

Nicolai Grossherr Nicolai Grossherr
5 mag 2018 12:49:10
Mostra i restanti 2 commenti
0

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
}
17 ago 2017 09:00:03