web-dev-qa-db-de.com

Der next_posts_link () funktioniert nur mit der ursprünglichen $ wp_query

Ich habe eine benutzerdefinierte Vorlage, mit der ich ausgelagerte Blog-Posts anzeigen möchte. Dies ist der Anfang meiner Datei:

$wp_query = new WP_Query($args);
    if($wp_query->have_posts()){
        while($wp_query->have_posts()){ $wp_query->the_post();
            //something...
    <?php next_posts_link('Older Entries'); ?>
    <?php previous_posts_link('Newer Entries'); ?>

Es funktioniert gut - es zeigt ältere und neuere Links, wenn es sollte. Auf der ersten Seite wird nur ein Link zu älteren Einträgen angezeigt. Auf der zweiten Seite sowohl neuere als auch ältere Einträge usw.

Aber ich möchte nicht den aktuellen $wp_query überschreiben ... Ich möchte für diese Schleife beispielsweise $wp_query2 verwenden. Und die Links erscheinen überhaupt nicht, wenn ich das tue.

Danach: http://codex.wordpress.org/Function_Reference/next_posts_link drucken sie einen Link zur vorherigen/nächsten Gruppe von Posts innerhalb der aktuellen Abfrage. Ich gehe davon aus, dass $wp_query2 nicht meine "CURRENT QUERY" ist, aber $wp_query immer. Kann ich das irgendwie ändern?

UPDATE: Das manuelle Hinzufügen von &paged=2 zum Link bewirkt, dass der Link korrekt zur nächsten Gruppe von Posts (nächste Seite) und zur zweiten, dritten usw. Seite wechselt. previous_posts_link() funktioniert auch, wenn ich $wp_query2 verwende. Daher fehlt mir auf jeder Seite nur die Funktion next_posts_link().

6
Paul

next_posts_link und previous_posts_link verwenden den globalen $wp_query.

function get_next_posts_link( $label = null, $max_page = 0 ) {
    global $paged, $wp_query;

http://core.trac.wordpress.org/browser/tags/3.5/wp-includes/link-template.php#L1523

Das bedeutet, dass Sie so etwas tun müssen, damit diese richtig funktionieren.

$orig_query = $wp_query;
$wp_query = new WP_Query($args);
// the rest of your code
$wp_query = $orig_query;

Wenn Sie mit dem Laden von $wp_query für diese Seite fertig sind, gibt es keinen Grund, ihn beizubehalten. Es sollte ziemlich einfach sein, diese Kernfunktionen zu kopieren, sie zu ändern, um einen Abfrageparameter zu akzeptieren, und Ihre eigenen Paging-Funktionen zu erstellen.

9
s_ha_dum

In der WordPress-Quelle sieht es so aus, als würde next_posts_link die globale Variable $ paged verwenden. Ich vermute, dass das nur für die Primärschleife funktionieren wird.

Eine ziemlich gute Lösung, wie Paginierung für sekundäre Schleifen funktioniert, finden Sie hier: http://weblogtoolscollection.com/archives/2008/04/19/paging-and-custom-wordpress-loops/

Dabei wird die ausgelagerte Abfragevariable explizit in der Abfrage festgelegt:

<h3>Recent Articles</h3>
<ul>
<?php 
$temp = $wp_query;
$wp_query= null;
$wp_query = new WP_Query();
$wp_query->query('showposts=5'.'&paged='.$paged);
?>

Hoffentlich hilft das.

3
Ed Burns