Sayfalandırmalı birden çok WP_Query döngüsü


11

Bu konuda birkaç soru daha var (ve WP_Query sayfalama birçok insan için büyük bir soru gibi görünüyor) bu yüzden tam olarak nasıl işlevini yapmak için daraltmaya çalışıyorum.

Bu kodu sayfalandırma ile tek bir özel döngü oluşturabiliyorum:

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

... ancak doğal olarak bu döngüyü kopyalarsam / yapıştırırsam, tam bir klon olarak çalışır, yani "Sayfa 2" yi tıkladığınızda döngülerin ikisi için sizi yönlendirir.

Bunları birbirinden ayırmanın bir yolu var mı, böylece her biri ayrı ayrı sayfalandırıyor mu?

Herkes kendi yerel sürümünü kurmak ve onunla oynamak istiyorsa yinelenen döngü ile tam kod: http://paste.pocoo.org/show/573108/


Kendim için çoklu döngü sayfalama sorununu çözdüğüm bu yazıya bak wordpress.stackexchange.com/questions/126814/…
ewroman

Yanıtlar:


19

Evet, yapılabilir. Anahtar, formatparametreyi iki sorgu için farklı kılmaktır :

    <!-- 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'a cevap verdiğiniz için çok teşekkür ederim. Ne dediğini anlıyorum, ancak get_query_var'ı değiştirmeye çalıştığımda bir hata veriyor. Güncellenen kod şöyledir : paste.pocoo.org/show/573208 Hata: Üye bir işleve çağrı (27) satırındaki C: \ wamp \ www \ wordpress_wp_query_pagination \ wp-include \ query.php nesnesinde olmayan get () çağrısı
Cory

İki şey: 1) $wp_queryKüresel ile bazı tuhaf şeyler yapıyorsunuz . (2) WP_QueryKendi içinde kullanımı imkansız kılan bazı uygulama gariplikleri ve onunla get_query_var()birlikte başka işlevler vardır, bu yüzden genellikle $_GETküresel olana doğrudan atıfta bulunarak döküm yaparak sterilize ettiğimden emin olurum int. Cevabımı tam çalışan bir örnekle güncelledim.
Boone Gorges

Harika Boone! Çok teşekkürler, harika çalışıyor. İyice çalışma zamanı. Garip WP_Query şeyler bu 2008 makalesindendi: weblogtoolscollection.com/archives/2008/04/19/… get_query_var'ın aynı varmayı aldığını düşündüm, ancak doğrudan $ _GET ile almak için beyne sahip değildim. Tekrar, çok teşekkürler adamım. Sonsuza dek bununla savaşıyoruz.
Cory

Güzel. İyi şanslar!
Boone Gorges

Ah bok. Bununla benimle savaşmaya devam etmek ister misin? :) Sürümünüzü test ettikten sonra sayfa 1'e geri dönmediğini fark ettim. Sayfa 2'de takılı kalıyor. Ayrıca, farklı bir sayfayı tıkladığınızda, diğer döngüyü sıfırlar. Bu $ _GET değişkenlerini birlikte zincirlemek mümkün mü ki foo.com/?paged_1=2&paged_2=3 adresini hatırlayabilsin mi?
Cory
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.