Anhalten und Fortsetzen der WP_Query-Ergebnisse

Ich habe eine benutzerdefinierte WP_Query etwa so:

 $query_args = array( 'post_type' => 'post', 'cat' => 12, 'posts_per_page' => 5 ); $custom_query = new WP_Query($query_args); 

Jetzt muss ich die Ergebnisse dieser Abfrage in 3 Mengen teilen, der erste Satz wird nur den ersten Beitrag haben, der zweite Satz wird den zweiten und dritten Beitrag haben und dann wird der dritte Satz den vierten und fünften Beitrag haben.

Der Grund für diese Aufteilung ist, dass Einträge in jedem Satz ein unterschiedliches äußeres und inneres Markup haben, äußeres Markup ist in etwa so:

 
1st Post Here
2nd + 3rd Posts Here
4th + 5th Posts Here

Gibt es eine Möglichkeit, den ersten Post im ersten div zu drucken, die Abfrage anzuhalten, dann die Abfrage im zweiten div wieder aufzunehmen, anzuhalten und die Abfrage im dritten div weiter fortzusetzen?

Solutions Collecting From Web of "Anhalten und Fortsetzen der WP_Query-Ergebnisse"

Ich denke, der beste Weg, um dies zu erreichen, könnte sein, Ihre WP_Query nur einmal auszuführen, aber dann auf die gespeicherten Abfrageergebnisse dreimal zuzugreifen, um jeden gewünschten Datensatz auszugeben. Dies erspart Ihnen die Verwendung mehrerer DB-Abfragen. Durch die Verwendung von drei separaten Schleifen können Sie nach Bedarf weiterhin ein Eltern-DIV zu jeder Gruppe von Posts hinzufügen. Hier ist das Konzept, das ich mir ausgedacht habe:

 
< ?php $q = new WP_Query([ 'post_type' => 'post', 'posts_per_page' => 6 ]); $posts = $q->posts; ?>
< ?php $c = 0; foreach ($posts as $a_post) { $c++; if( $c==1 ) { echo $a_post->post_title . " - Post #$c
"; break; } } ?>
< ?php $c = 0; foreach ($posts as $a_post) { $c++; if( $c==2 || $c==3 ) { echo $a_post->post_title . " - Post #$c
"; } } ?>
< ?php $c = 0; foreach ($posts as $a_post) { $c++; if( $c==4 || $c==5 ) { echo $a_post->post_title . " - Post #$c
"; } } ?>

Sie können html bedingt schreiben, indem Sie eine if statement verwenden, um den Index zu überprüfen und HTML darauf basierend zu drucken.

Etwas wie:

 $custom_query = new WP_Query($query_args); $i = 1; while($custom_query->have_posts()): the_post(); if($i == 1){?> 
1st Post Here
< ?php } elseif($i == 2 || $i == 3){?>
1st Post Here
< ?php } else{?>
1st Post Here
< ?php } endwhile;

Wenn der Unterschied nur eine data-span in Ihrem HTML ist, können Sie die zweite Bedingung überspringen und verwenden

 
your Post Here

Versuche dies:

Sie verwenden die Variable $ getpoststs, um die gedruckten Post-IDs zu speichern. Dann erstellen Sie eine neue Abfrage, wenn Sie die anderen Posts mit Ausnahme der bereits gedruckten Posts anzeigen möchten.

Deine erste Anfrage

 < ?php $gottenposts = array(); //here you will save the posts ids $args = array('post_type' => 'post', 'posts_per_page' => 6); $query = new WP_Query($args); if($query->have_posts()) : while($query->have_posts()) : $query->the_post();?> //your HTML code here < ?php endwhile; endif; ?> 

Ihre zweite Abfrage

 < ?php $args = array('post_type' => 'post', 'posts_per_page' => -1, 'post__not_in' => $gottenposts ?> //ETC... 

Hoffe das hilft!

Ich denke, du kannst das nicht mit einer einzigen Abfrage machen. Sie müssen mehrere Abfragen mit Post-Nummer verwenden.

Es wäre besser, benutzerdefinierte Feld Slug verwenden.

 $slider = new WP_Query(array( 'post_type' => 'post', 'posts_per_page' => 5, 'cat' => 12, 'post_status' => 'publish', 'meta_query' => array( array( 'key' => 'slider_key', 'value' => 'slider', 'compare' => 'IN' ) ) ));