Mehrere WP_Query-Schleifen mit Paginierung

10

Es gibt noch ein paar andere Fragen dazu (und die WP_Query-Paginierung scheint für viele Leute eine große Frage zu sein), daher versuche ich, genau einzugrenzen, wie sie funktioniert.

Ich kann eine einzelne benutzerdefinierte Schleife mit Paginierung dieses Codes erstellen:

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

... aber wenn ich diese Schleife kopiere / einfüge, funktioniert sie natürlich als exakter Klon, dh wenn Sie auf "Seite 2" klicken, gelangen Sie zu BEIDEN Schleifen.

Gibt es eine Möglichkeit, diese voneinander zu trennen, sodass jeder separat paginiert?

Hier ist der vollständige Code mit doppelter Schleife, wenn jemand daran interessiert ist, eine eigene lokale Version einzurichten und damit zu spielen: http://paste.pocoo.org/show/573108/

Cory
quelle
Schauen Sie sich diesen Beitrag an, den ich für mich selbst gelöst habe. wordpress.stackexchange.com/questions/126814/…
ewroman

Antworten:

18

Ja, das kann man machen. Der Schlüssel besteht darin, den formatParameter für die beiden Abfragen zu unterscheiden:

    <!-- 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
quelle
Vielen Dank für die Antwort von Boone. Ich verstehe, was Sie sagen, aber wenn ich versuche, get_query_var zu ändern, wird ein Fehler ausgegeben. Hier ist der aktualisierte Code: paste.pocoo.org/show/573208 Der Fehler: Aufruf einer Mitgliedsfunktion get () für ein Nichtobjekt in C: \ wamp \ www \ wordpress_wp_query_pagination \ wp-includes \ query.php in Zeile 27
Cory
Zwei Dinge: 1) Sie machen einige seltsame Dinge mit dem $wp_queryGlobalen. (2) Es gibt einige Seltsamkeiten bei der Implementierung an WP_Querysich, die es unmöglich machen, sie zu verwenden, get_query_var()und einige andere Funktionen damit. $_GETDaher verweise ich im Allgemeinen direkt auf das Superglobale und stelle sicher, dass es durch Casting auf bereinigt wird int. Ich habe meine Antwort mit einem vollständigen Arbeitsbeispiel aktualisiert.
Boone Gorges
Super Boone! Vielen Dank, funktioniert super. Zeit, es gründlich zu studieren. Das seltsame WP_Query-Zeug stammt aus diesem Artikel von 2008: weblogtoolscollection.com/archives/2008/04/19/… Ich nahm an, dass get_query_var dieselbe Var abruft, hatte aber nicht das Gehirn, um es direkt mit $ _GET zu bekommen. Nochmals vielen Dank Mann. Ich habe für immer damit gekämpft.
Cory
Cool. Viel Glück!
Boone Gorges
Ah Mist. Möchtest du das weiter mit mir bekämpfen? :) Nach dem Testen Ihrer Version ist mir aufgefallen, dass sie nicht zu Seite 1 zurückkehrt. Sie bleibt auf Seite 2 hängen. Wenn Sie auf eine andere Seite klicken, wird auch die andere Schleife zurückgesetzt. Ist es möglich, diese $ _GET-Variablen miteinander zu verketten, damit sie sich an foo.com/?paged_1=2&paged_2=3 erinnern ?
Cory