it-swarm.com.de

Verwenden eines WP_Query-Objekts in der Schleife eines anderen WP_Query-Objekts

Ich erstelle zwei verschiedene WP_Query-Objekte, eines für jeden von zwei verschiedenen Beitragstypen, die ich verwende. Beim Erstellen meiner Ausgabe möchte ich eine Schleife durch eines der Objekte und gleichzeitig eine Schleife durch das andere Objekt ausführen, damit ich Teile davon zusammen ausgeben kann. Hier ist ein Beispiel für das, was ich erreichen möchte:

$rotator_args = array(
    'post_type' => 'rotator',
    );

$rotator = new WP_Query($rotator_args);

$numrotators = $rotator->post_count; 

$testimonial_args = array(
    'post_type' => 'testimonial',
    'posts_per_page' => $numrotators,
    );

$testimonial = new WP_Query($testimonial_args);

while ( $rotator->have_posts() ) : 
    $rotator->the_post(); //setup the rotator posts
    $testimonial->the_post(); //this breaks things, understandably
    $rotator_image = get_the_post_thumbnail($rotator->ID, 'large');
    $testimonial_image = get_the_post_thumbnail($testimonial->ID, 'large');
    $return .= '<div>' . $rotator_image . '</div>';
    $return .= '<div>' . $testimonial_image . '</div>';
endwhile;
return $return;

Das geht aber nicht. Das Entfernen von $testimonial->the_post(); (und des zugehörigen $testimonial-bezogenen Codes) behebt Probleme.

1

Gehen Sie jede Schleife durch und speichern Sie das Post-Objekt in einem Array. Dann am Ende kombinieren. (Dies ist völlig ungetestet)

https://Gist.github.com/1762204

3
Bill Erickson

Ich bin mir nicht sicher, ob Sie die beiden Schleifen zusammenführen können, da nichts vorhanden ist, um sie vom Standpunkt der Daten getrennt zu halten. Versuchen Sie, Daten aus einem Testimonial in den Rotator einzufügen?

0
Norcross

Edit: Bills Refaktor ist viel besser als mein Klebeband Edit: Außerdem bleibt meine Bearbeitung bei demselben Testimonial, was nicht einmal das gewünschte Ergebnis war. Nochmals: siehe Bills Refaktor

Das Problem, das Sie haben, ist mit $ post. Jedes Mal, wenn Sie the_post () auslösen, enthält $ post die entsprechenden Daten. Ich würde folgendes vorschlagen:

global $post;

$rotator_args = array(
    'post_type' => 'rotator',
    );

$rotator = new WP_Query($rotator_args);

$numrotators = $rotator->post_count; 

$testimonial_args = array(
    'post_type' => 'testimonial',
    'posts_per_page' => $numrotators,
    );

$testimonial = new WP_Query($testimonial_args);
if( $testimonial->have_posts() )
{
    $testimonial->the_post();
    $my_testimonial = $post;
}

while ( $rotator->have_posts() ) : 
    $rotator->the_post(); //setup the rotator posts
    $rotator_image = get_the_post_thumbnail($rotator->ID, 'large');
    $testimonial_image = get_the_post_thumbnail($my_testimonial->ID, 'large');
    $return .= '<div>' . $rotator_image . '</div>';
    $return .= '<div>' . $testimonial_image . '</div>';
endwhile;
return $return;

Gibt es Daten, die $ rotator mit $ testimonial verbinden? Wenn nicht, dann verstehe ich nicht, worum es geht ... Sie haben nur zwei unterschiedliche Schleifen.

0
Matt G