Beberapa loop WP_Query dengan Pagination

10

Ada beberapa pertanyaan lain tentang ini (dan pagination WP_Query tampaknya menjadi pertanyaan besar bagi banyak orang) jadi saya mencoba mempersempit cara membuatnya berfungsi.

Saya dapat membuat satu loop kustom dengan pagination kode ini:

// 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;

... tapi tentu saja jika saya salin / tempel loop ini, itu berfungsi sebagai klon yang tepat, artinya, ketika Anda mengklik "Halaman 2" itu membawa Anda ke KEDUA loop.

Apakah ada cara untuk memecah ini satu sama lain sehingga masing-masing paginate secara terpisah?

Berikut kode lengkap lengkap dengan duplikat loop jika ada yang tertarik untuk membuat versi lokal mereka sendiri dan mempermainkannya: http://paste.pocoo.org/show/573108/

Cory
sumber
lihat posting ini yang telah saya selesaikan beberapa masalah pagination loop untuk diri sendiri wordpress.stackexchange.com/questions/126814/…
ewroman

Jawaban:

18

Ya, itu bisa dilakukan. Kuncinya adalah membuat formatparameter berbeda untuk dua kueri:

    <!-- 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>
Boone Gorges
sumber
Terima kasih banyak telah membalas Boone. Saya mengerti apa yang Anda katakan, tetapi setiap kali saya mencoba untuk mengubah get_query_var, itu membuat kesalahan. Berikut kode yang diperbarui: paste.pocoo.org/show/573208 Kesalahan: Panggil ke fungsi anggota dapatkan () pada non-objek di C: \ wamp \ www \ wordpress_wp_query_pagination \ wp-include \ query.php pada baris 27
Cory
Dua hal: 1) Anda melakukan beberapa hal aneh dengan $wp_queryglobal. (2) Ada beberapa keanehan implementasi WP_Queryitu sendiri yang membuatnya tidak mungkin untuk digunakan get_query_var()dan beberapa fungsi lainnya, jadi saya biasanya merujuk $_GETsuperglobal secara langsung, memastikan untuk membersihkan dengan melakukan casting int. Saya telah memperbarui jawaban saya dengan contoh yang berfungsi penuh.
Boone Gorges
Boone Luar Biasa! Terima kasih banyak, bekerja sangat baik. Saatnya mempelajarinya secara menyeluruh. Hal-hal aneh WP_Query berasal dari artikel 2008 ini: weblogtoolscollection.com/archives/2008/04/19/... Saya pikir mungkin get_query_var mengambil var yang sama, tetapi tidak punya otak untuk mendapatkannya langsung dengan $ _GET. Sekali lagi, terima kasih banyak. Berkelahi dengan ini selamanya.
Cory
Keren. Semoga berhasil!
Boone Gorges
Ah sial. Mau terus memperjuangkan ini bersamaku? :) Setelah menguji versi Anda, saya perhatikan itu tidak kembali ke halaman 1. Ini macet di halaman 2. Juga, ketika Anda mengklik pada halaman yang berbeda, itu akan me-reset loop lain. Apakah mungkin untuk mengaitkan variabel $ _GET ini bersama-sama sehingga ia mengingat foo.com/?paged_1=2&paged_2=3 ?
Cory