Paginazione WordPress Non Funzionante - Mostra Sempre il Contenuto della Prima Pagina

10 lug 2013, 16:28:36
Visualizzazioni: 45.6K
Voti: 10

Sto lavorando su un sito web dove ho un blog ma ho anche un custom post type per permettermi di inserire alcuni video.

Vorrei utilizzare la paginazione in modo che se ci sono più di 9 video visualizzati, venga attivata la paginazione.

La prima parte funziona. I video sono effettivamente limitati a 9 per pagina e la paginazione appare correttamente in fondo.

Tuttavia, quando clicco sul link per la seconda pagina, anche se l'URL cambia, vengono visualizzati i video della prima pagina.

Per i miei post 'normali' del blog, la paginazione funziona esattamente come previsto.

Questo è il codice che sto attualmente utilizzando per il mio custom post type:

<?php if ( have_posts() ) : ?>
<?php $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; query_posts('post_type=videos&posts_per_page=9&paged=$paged'); ?>

    <?php /* Inizia il Loop */ ?>
    <?php while ( have_posts() ) : the_post(); ?>

Qualsiasi aiuto sarebbe molto apprezzato.

1
Commenti

possibile duplicato di Come sistemare la paginazione per loop personalizzati?

Chip Bennett Chip Bennett
31 ott 2013 16:36:09
Tutte le risposte alla domanda 1
3
18

Perché il tuo codice attuale non funziona

Ottieni sempre il contenuto della prima pagina, perché la stringa di parametri passata a query_posts essendo racchiusa tra apici singoli impedisce alle variabili (così come alle sequenze di escape per caratteri speciali diversi da $) di essere interpretate.

query_posts("post_type=videos&posts_per_page=9&paged=$paged"); risolverebbe questo problema.

query_posts('post_type=videos&posts_per_page=9&paged='.$paged); funzionerebbe altrettanto.

E infine, anche passare un array di argomenti misti anziché una stringa in stile query URL andrebbe bene.

Detto questo però, non dovresti usare affatto query_posts:

Come dovrebbe essere fatto

Come hai menzionato nel tuo commento, hai provato a usare get_posts.
Questa è davvero una funzione molto utile, ma non è il modo corretto se vuoi utilizzare successivamente un WordPress-Loop. get_posts restituisce un array di oggetti post - la proprietà posts dell'oggetto WP_Query. Ma solo quella proprietà, senza tutte le altre funzionalità e metodi che WP_Query offre.

Quindi, per adattarti al tuo frammento di codice sopra, fai qualcosa di simile a questo:

<?php
    $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; 
    $args = array(
        'post_type' => 'videos',
        'posts_per_page' => 9,
        'paged' => $paged
    );
    $your_query = new WP_Query( $args );

    if ( $your_query->have_posts() ) {
        /* The Loop */
        while ( $your_query->have_posts() ) {
            $your_query->the_post();
            // fai qualcosa
        }
    } else {
        echo 'Spiacente, nessun post trovato.';
    }
?>
10 lug 2013 16:36:43
Commenti

Grazie mille per questo, lettura interessante. Tuttavia, potresti fornire l'alternativa utilizzando il metodo get_posts()?

È così semplice come:

<?php $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; get_posts("post_type=videos&posts_per_page=9&paged=$paged"); ?>

In realtà non funziona per me, ma potrebbe essere a causa di codice altrove?

Johnny Johnny
10 lug 2013 17:13:21

Vedi risposta aggiornata.

Johannes Pille Johannes Pille
10 lug 2013 18:58:12

Grazie mille per aver trovato il tempo di mostrarmi come usare questo metodo. Lo apprezzo davvero.

Johnny Johnny
11 lug 2013 00:35:33