Paginazione con 5 articoli per pagina

10 dic 2015, 15:53:03
Visualizzazioni: 41.3K
Voti: 3

Sto cercando di creare un elenco paginato di articoli e ho utilizzato il Codex per scrivere del codice, ma sembra che stia facendo qualcosa di sbagliato.

Questi sono i miei argomenti di wp_query

$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
            $the_query = new WP_Query(
                array
                    (
                        'posts_per_page' => 5,
                        'post_type' => 'post',
                        'paged' => $paged
                    )
            );

Il contenuto di $paged viene effettivamente mostrato come 1 come previsto

Ho aggiunto next_posts_link al mio statement if ma i link non vengono visualizzati.

if ( $the_query->have_posts() ) {
                previous_posts_link( '« Articoli più recenti' );
                while ( $the_query->have_posts() ) {
                    $the_query->the_post();
                    echo '<div class="news-item">';
                        // contenuto dell'articolo qui
                    echo '</div>';
                }
                next_posts_link( 'Articoli precedenti »', 0 );
            }

MODIFICA

La pagina in cui questo viene mostrato non è una pagina principale, ma è una pagina statica che ho creato. Ho creato il template page-news.php e poi ho creato una pagina chiamata 'News' ed è qui che risiede questo codice. Potrebbe essere questo il motivo?

1
Commenti

Possibile duplicato di The next_posts_link() mi mostra una pagina aggiuntiva vuota

Pieter Goosen Pieter Goosen
10 dic 2015 17:52:16
Tutte le risposte alla domanda 1
7

Questo funziona per me su una singola pagina utilizzando un template. Assicurati solo di impostare next_posts_link( 'Articoli più vecchi »', $the_query->max_num_pages );.

// imposta il parametro "paged" (usa 'page' se la query è su una pagina statica frontale)
$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : '1';
$args = array (
    'nopaging'               => false,
    'paged'                  => $paged,
    'posts_per_page'         => '5',
    'post_type'              => 'post',
);

// La Query
$query = new WP_Query( $args );

// Il Loop
if ( $query->have_posts() ) {

    previous_posts_link( '« Articoli più recenti' );

    while ( $query->have_posts() ) {
        $query->the_post();
        echo '<div class="news-item">';
            // contenuto del post qui
                echo '<h1 class="page-title screen-reader-text">' . the_title() . '</h1>';
        echo '</div>';
    }

    next_posts_link( 'Articoli più vecchi »', $query->max_num_pages );

} else {
    // nessun post trovato
    echo '<h1 class="page-title screen-reader-text">Nessun articolo trovato</h1>';
}

// Ripristina i dati originali del Post
wp_reset_postdata();
10 dic 2015 16:47:30
Commenti

La pagina in cui viene visualizzato questo non è una front page, ma è una pagina statica che ho creato. Ho creato il template page-news.php e poi ho creato una pagina chiamata 'News' ed è lì che risiede questo codice. Potrebbe essere questo il motivo?

user1486133 user1486133
10 dic 2015 16:48:21

Quali modifiche hai apportato al mio codice? Non riesco a trovare la modifica.

user1486133 user1486133
10 dic 2015 16:49:28

Stavo testando sulla front page al di fuori del main loop, proverò questo su una pagina statica e ti farò sapere se c'è qualche differenza.

jgraup jgraup
10 dic 2015 16:51:27

Quindi, sembra che scompaia quando lo inserisci all'interno di un template. Ora che ho un esempio funzionante per fare ulteriori test, un attimo.

jgraup jgraup
10 dic 2015 16:54:56

E questo rende la tua risposta diversa dalla mia.....???????

Pieter Goosen Pieter Goosen
10 dic 2015 17:00:11

@user1486133, ora funziona perfettamente. Basta aggiungere $the_query->max_num_pages al tuo next_posts_link invece di 0.

jgraup jgraup
10 dic 2015 17:02:33

@jgraup grazie, sì questa era la soluzione corretta. Grazie per averla presentata e per non essere stato condiscendente lungo il percorso :)

user1486133 user1486133
10 dic 2015 17:38:49
Mostra i restanti 2 commenti