Più loop WP_Query con impaginazione


10

Ci sono alcune altre domande su questo (e l'impaginazione di WP_Query sembra essere una domanda enorme per molte persone), quindi sto cercando di restringere esattamente come farlo funzionare.

Sono in grado di creare un singolo ciclo personalizzato con l'impaginazione questo codice:

// http://weblogtoolscollection.com/archives/2008/04/19/paging-and-custom-wordpress-loops/
$temp = $wp_query;
$wp_query= null;
$wp_query = new WP_Query();
$args = array(
    'showposts' => 2,
    'paged' => $paged
);
$wp_query->query($args);
while ($wp_query->have_posts()) : $wp_query->the_post();

// The Post
the_title();
echo '<br>';
the_category(' ');
the_excerpt();
echo '<hr>';

endwhile;
// http://codex.wordpress.org/Function_Reference/paginate_links#Examples
$big = 999999999;
$pag_args = array(
    'base' => str_replace( $big, '%#%', get_pagenum_link( $big ) ),
    'format' => '?paged=%#%',
    'current' => max( 1, get_query_var('paged') ),
    'total' => $wp_query->max_num_pages
);
echo paginate_links($pag_args);
$wp_query = null;
$wp_query = $temp;

... ma naturalmente se copio / incollo questo loop, funziona come un clone esatto, il che significa che quando fai clic su "Pagina 2" ti porta a ENTRAMBI i loop.

C'è un modo per separarli l'uno dall'altro in modo che ognuno impagini separatamente?

Ecco il codice completo completo di loop duplicato se qualcuno è interessato a configurare la propria versione locale e giocare con esso: http://paste.pocoo.org/show/573108/


guarda questo post per il quale ho risolto il problema della paginazione a loop multipli per me stesso wordpress.stackexchange.com/questions/126814/…
ewroman

Risposte:


18

Sì, si può fare. La chiave è rendere formatdiverso il parametro per le due query:

    <!-- Cats -->
    <div class="animals">
        <?
            $paged1 = isset( $_GET['paged1'] ) ? (int) $_GET['paged1'] : 1;
            $paged2 = isset( $_GET['paged2'] ) ? (int) $_GET['paged2'] : 1;

            // Custom Loop with Pagination 1
            // http://codex.wordpress.org/Class_Reference/WP_Query#Usage
            $args1 = array(
                'paged'          => $paged1,
                'posts_per_page' => 2,
            );
            $query1 = new WP_Query( $args1 );

            while ( $query1->have_posts() ) : $query1->the_post();
                the_title();
                echo '<br>';
                the_category(' ');
                the_excerpt();
                echo '<hr>';
            endwhile;

            // http://codex.wordpress.org/Class_Reference/WP_Query#Pagination_Parameters
            $pag_args1 = array(
                'format'  => '?paged1=%#%',
                'current' => $paged1,
                'total'   => $query1->max_num_pages,
                'add_args' => array( 'paged2' => $paged2 )
            );
            echo paginate_links( $pag_args1 );
        ?>
    </div>

    <!-- Dogs -->
    <div class="animals">
        <?
            // Custom Loop with Pagination 2
            $args2 = array(
                'paged'          => $paged2,
                'posts_per_page' => 2,
            );
            $query2 = new WP_Query( $args2 );

            while ( $query2->have_posts() ) : $query2->the_post();
                the_title();
                echo '<br>';
                the_category(' ');
                the_excerpt();
                echo '<hr>';
            endwhile;

            $pag_args2 = array(
                'format'  => '?paged2=%#%',
                'current' => $paged2,
                'total'   => $query2->max_num_pages,
                'add_args' => array( 'paged1' => $paged1 )
            );
            echo paginate_links( $pag_args2 );
        ?>
    </div>

Grazie mille per aver risposto Boone. Capisco quello che stai dicendo, ma ogni volta che provo a cambiare get_query_var, viene visualizzato un errore. Ecco il codice aggiornato: paste.pocoo.org/show/573208 L'errore: chiamata a una funzione membro get () su un non oggetto in C: \ wamp \ www \ wordpress_wp_query_pagination \ wp-Includes \ query.php sulla riga 27
Cory,

Due cose: 1) Stai facendo cose strane con il $wp_queryglobale. (2) Ci sono alcune stranezze di implementazione in WP_Querysé che rendono impossibile l'uso get_query_var()e alcune altre funzioni con esso, quindi in genere faccio riferimento $_GETdirettamente al superglobal, assicurandomi di disinfettare lanciando int. Ho aggiornato la mia risposta con un esempio funzionante completo.
Boone Gorges,

Boone eccezionale! Grazie mille, funziona benissimo. È tempo di studiarlo a fondo. La strana roba di WP_Query proveniva da questo articolo del 2008: weblogtoolscollection.com/archives/2008/04/19/… Ho pensato che forse get_query_var stesse recuperando lo stesso var, ma non avevo il cervello di ottenerlo direttamente con $ _GET. Ancora una volta, grazie mille amico. Ho combattuto con questo per sempre.
Cory,

Freddo. In bocca al lupo!
Boone Gorges,

Ah merda. Vuoi continuare a combattere questo con me? :) Dopo aver testato la tua versione ho notato che non torna alla pagina 1. Si blocca a pagina 2. Inoltre, quando fai clic su una pagina diversa, ripristina l'altro ciclo. È possibile concatenare queste variabili $ _GET in modo da ricordare foo.com/?paged_1=2&paged_2=3 ?
Cory,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.