Zeigen Sie nur eine bestimmte Anzahl von Posts an, abhängig davon, wie viele Posts in einer Abfrage verfügbar sind

Ich versuche, etwas Code für einen Slider von Posts zu schreiben, im Moment beinhaltet mein Code zwei WP_Query s, eins in dem anderen, aber ich kann nicht umhin zu WP_Query , dass es eine effizientere Art zu tun gibt, was ich versuche leisten.

Die Schritte sind:

  1. Überprüft, wie viele veröffentlichte Posts eines bestimmten Post-Typs mit WP_Query erstellt wurden.
  2. Wenn> = 4 ist, möchte ich der Seite einen Schieberegler hinzufügen, damit ich den Schieberegler-Container ausdrucke.
  3. Dann benutze ich im HTML des Sliders die Anzahl der Posts aus dem ersten WP_Query ( $num_posts ), um herauszufinden, wie viele Posts ich in der nächsten Abfrage ausdrucken möchte. Wenn> = 12 verfügbar sind, möchte ich alle 12 drucken. Wenn zwischen 8 und 11 verfügbar sind, möchte ich nur 8 ausdrucken. Wenn zwischen 4 und 7 verfügbar sind, möchte ich nur 4 ausdrucken.
  4. Ich $postsToPrint die Zahl, die ich ausdrucken möchte ( $postsToPrint ), als Argument für die zweite WP_Query in Showposts.

Gibt es eine Möglichkeit, dies ohne zwei WP_Query s zu WP_Query ? Es scheint ineffizient zu sein.

Erklärung des Codes hier:

  // Initial query which only exists so I can count available posts $args = array ( 'post_type' => 'mytheme_posttype', 'post_status' => 'publish', 'showposts' => 12 ); $sliderQuery = new WP_Query( $args ); // Count how many available posts there are for my slider $num_posts = $sliderQuery->post_count; if ($num_posts >=4) : ?> // Want to add a slider if posts >= 4, so start printing out slider container HTML here. // I then want to check how many posts were collected in the above query, and only print out a certain number depending on how many there are available // if there are 12 available posts, print out all 12 if ($num_posts >= 12) { $postsToPrint = 12; } // else if there are between 8 and 11 available posts, only print out 8 elseif ($num_posts >=8) { $postsToPrint = 8; } // if there are between 4 and 7 available posts, only print out 4 else { $postsToPrint = 4; } // Second query for actually printing out posts. $args = array ( 'post_type' => 'mytheme_posttype', 'post_status' => 'publish', 'showposts' => $postsToPrint ); $loop = new WP_Query( $args ); while ( $loop->have_posts() ) : $loop->the_post(); // print out post thumbnail and some other post data in slider endwhile; // close slider container HTML endif; 

Vielen Dank!

Solutions Collecting From Web of "Zeigen Sie nur eine bestimmte Anzahl von Posts an, abhängig davon, wie viele Posts in einer Abfrage verfügbar sind"

Sie müssen nicht zwei Abfragen ausführen, da Sie bereits haben, was Sie wollen (noch mehr).

 $args = array ( 'post_type' => 'mytheme_posttype', 'post_status' => 'publish', 'numberposts' => 12, ); $sliderQuery = new WP_Query($args); $num_posts = $sliderQuery->post_count; if ($num_posts >=4) { if ($num_posts >= 12) $postsToPrint = 12; elseif ($num_posts >=8) $postsToPrint = 8; else $postsToPrint = 4; while ($sliderQuery->have_posts() && $postsToPrint--) { $sliderQuery->the_post(); // Work with the post } } 

// BEARBEITEN
Okay, hier ist eine kleine Erklärung, was passiert und wie / warum das funktioniert …

Anfangs wird $postsToPrint gesetzt (dh 4, 8 oder 12 – abhängig von der Gesamtzahl der Posts). Wir dekrementieren dann die $postsToPrint-- ( $postsToPrint-- ist dasselbe wie $postsToPrint = $postsToPrint - 1 ). Solange wir noch nicht so viele Beiträge abgerufen haben, wie wir wollen, machen wir weiter. Wenn wir unsere definierte maximale Anzahl von Posts erreicht haben, brechen wir die Schleife ab.

Das obige while() ist also eine effiziente Version der folgenden, vollständig erweiterten Version:

 while ($sliderQuery->have_posts() && $postsToPrint > 0) { $sliderQuery->the_post(); // Work with the post // We've handled another post, so decrement the number of posts to be handled $postsToPrint = $postsToPrint - 1; } 

Ich hoffe, das macht es ein bisschen klarer …