WP_Query meistern Mit der Schleife

Wie ich in der Einleitung zu dieser Serie skizzierte, ist das WP_Query Klasse hat vier Hauptelemente:

  • Die Argumente für die Abfrage verwenden Parameter, die in dieser Serie ausführlich behandelt werden
  • die Abfrage selbst
  • die Schleife, die Postinhalte, Titel oder was auch immer Sie anzeigen möchten, ausgibt
  • Fertigstellung: Schließen von Tags und Tags und Zurücksetzen der Post-Daten

In diesem Tutorial zeige ich Ihnen, wie Sie die Schleife mit verwenden WP_Query, einschließlich der zwei wichtigsten Möglichkeiten zur Strukturierung der Schleife und zur Verwendung mehrerer Schleifen.

Wo der Loop sitzt

Ohne Schleife wird auf Ihrer Seite nichts angezeigt. Nachdem WordPress die Abfrage mit den von Ihnen definierten Argumenten ausgeführt hat, muss ihnen mitgeteilt werden, was aus den abgerufenen Daten auszugeben ist. Hier kommt die Schleife ins Spiel.

Die Schleife kommt also nach Ihrer Abfrage und verwendet drei Tags:

  • if ($ query-> have_posts ()) prüft, ob Beiträge vorhanden sind.
  • while ($ query-> have_posts ()) wiederholt die Schleife für jeden Beitrag, solange Beiträge abgerufen werden.
  • $ query-> the_post () greift auf diesen Beitrag zu.

Hier passt also die Schleife in die WP_Query Klasse:

have_posts ()) // Beginne, die Abfrageergebnisse zu durchlaufen. while ($ query-> have_posts ()) $ query-> the_post (); // Inhalt der abgefragten Post-Ergebnisse finden Sie hier.  // Stellen Sie die ursprünglichen Postdaten wieder her. wp_reset_postdata (); ?>

Nachdem Sie die Schleife ausgeführt haben, müssen Sie nur noch die Dinge aufräumen wp_reset_postdata ().

Struktur der Schleife

Wie Ihre Schleife aufgebaut ist, hängt davon ab, welche Daten Sie in Ihrem Beitrag anzeigen möchten. Hier ist eine Beispielschleife, die den Posttitel, das vorgestellte Bild und einen Ausschnitt ausgibt. Sie würden eine solche Schleife auf einer Archivseite verwenden.

have_posts ()) // Beginne, die Abfrageergebnisse zu durchlaufen. while ($ query-> have_posts ()) $ query-> the_post (); ?> 
> "title =""> "title ="">

Diese Schleife zeigt genau das, was ich oben beschrieben habe: Bild, Titel und Ausschnitt.

Die Schleife weiterführen: Auf Inhalte prüfen

In manchen Fällen möchten Sie vielleicht vor Ihrer Beitragsliste eine Überschrift hinzufügen oder sie alle in ein enthaltendes Element einschließen. Wenn Sie dies einfach vor Ihrer Schleife hinzufügen, wird es unabhängig davon ausgegeben, ob die Abfrage tatsächlich Daten zurückgegeben hat. Dies bedeutet, dass Sie möglicherweise eine Überschrift mit nichts darunter oder etwas unnötiges Markup haben.

Dies ist sehr leicht zu umgehen, indem Sie das umschließende Element oder die Überschrift in Ihr einfügen ob Etikett:

have_posts ()) echo '
'; Echo '

'. __ ('Überschrift', 'tutsplus'). '

'; // Beginne, die Abfrageergebnisse zu durchlaufen. while ($ query-> have_posts ()) $ query-> the_post (); ?>
> "title =""> "title ="">
'; // Stellen Sie die ursprünglichen Postdaten wieder her. wp_reset_postdata (); ?>

Hier können Sie sehen, dass ich geprüft habe, ob von meiner Suchanfrage abgerufene Beiträge vorhanden sind und ob ich ein einschließendes Element geöffnet und eine Überschrift hinzugefügt habe. 

Dies ist auch nützlich, wenn Sie die Ergebnisse Ihrer Abfrage als Liste ausgeben möchten. Angenommen, ich möchte eine Liste aller Beiträge in einer bestimmten Kategorie erstellen. Das ul Das Element befindet sich nicht in meiner Schleife, da es sich nicht auf einen bestimmten Beitrag bezieht, aber ich möchte es nur ausgeben, wenn es Beiträge gibt. Also benutze ich das:

 'category-slug', 'post_type' => 'post'); // Benutzerdefinierte Abfrage. $ query = new WP_Query ($ args); // Überprüfen Sie, ob wir Abfrageergebnisse haben. if ($ query-> have_posts ()) echo '
    '; // Beginne, die Abfrageergebnisse zu durchlaufen. while ($ query-> have_posts ()) $ query-> the_post (); ?>
  • > "title ="">
  • '; // Stellen Sie die ursprünglichen Postdaten wieder her. wp_reset_postdata (); ?>

Dadurch wird geprüft, ob die Abfrage Beiträge abgerufen hat. Wenn ja, wird der Server geöffnet ul Element und führt dann die Schleife aus.

Zusätzliche Loops ausführen

Es ist wichtig zu wissen, dass Sie dies verwenden können WP_Query Um mehr als eine Schleife auszuführen, müssen Sie die Post-Daten zurücksetzen und eine zweite Instanz von starten WP_Query um dies zu tun. Dies liegt daran, dass jede Ihrer Schleifen Daten basierend auf unterschiedlichen Argumenten ausgibt.

In diesem Beispiel werden der Ausschnitt und das hervorgehobene Bild für den ersten Beitrag und dann nur der Titel jedes nachfolgenden Beitrags angezeigt:

 'post', 'posts_per_page' => '1'); // Erste benutzerdefinierte Abfrage. $ query1 = neue WP_Query ($ args1); // Überprüfen Sie, ob wir Abfrageergebnisse haben. if ($ query1-> have_posts ()) // Beginnen Sie mit dem Durchlaufen der Abfrageergebnisse. while ($ query1-> have_posts ()) $ query1-> the_post (); ?> 
> "title =""> "title ="">
'1', 'post_type' => 'post'); // Zweite benutzerdefinierte Abfrage. $ query2 = neue WP_Query ($ args2); // Überprüfen Sie, ob wir Abfrageergebnisse haben. if ($ query2-> have_posts ()) echo '
    '; // Beginne, die Abfrageergebnisse zu durchlaufen. while ($ query2-> have_posts ()) $ query2-> the_post (); ?>
  • > "title ="">
  • '; // Stellen Sie die ursprünglichen Postdaten wieder her. wp_reset_postdata (); ?>

Ich habe hier zwei Hauptargumente verwendet:

  • 'posts_per_page' => '1', Bei der ersten Abfrage verwendet, wird nur der neueste Beitrag ausgegeben.
  • 'offset' = '1', Wird bei der zweiten Abfrage verwendet, wird der erste Beitrag übersprungen, um sicherzustellen, dass er in der folgenden Liste nicht wiederholt wird.
  • Wie Sie dem obigen Code entnehmen können, unterscheidet sich die Schleife bei jeder Abfrage etwas. Der erste gibt das vorgestellte Bild, den Titel und den Ausschnitt aus, während der zweite prüft, ob die Abfrage Beiträge enthält und wenn ja, ein Fenster geöffnet wird ul Element und schließt jeden Beitragstitel in ein li Element und einen Link zu seiner Seite.

Sie werden auch bemerken, dass ich verwendet habe wp_reset_postdata () nach beiden Schleifen. Wenn ich das nicht getan hätte, würde die zweite Schleife immer noch Daten von der ersten ausgeben.

Zusammenfassung

Ohne Schleife, WP_Query tut nicht wirklich viel. Die Schleife ist der Code, den Sie verwenden, um die Daten anzuzeigen, die WordPress basierend auf Ihren Abfrageargumenten aus der Datenbank abgerufen hat.

Wie ich gezeigt habe, gibt es einige Variationen der Schleife. Bei einer einfachen Schleife werden alle Beiträge in der Reihenfolge ausgegeben, die Sie in Ihren Abfrageargumenten angegeben haben (oder standardmäßig nach Datum in absteigender Reihenfolge). Wenn Sie sich trennen if ($ query-> have_posts ()) und while ($ query-> have_posts ()), Sie können zusätzliche Markierungen außerhalb Ihrer Schleife einfügen, jedoch nur, wenn Ihre Abfrage Daten zurückgegeben hat. Und schließlich, indem Sie alternative Argumente angeben und verwenden wp_reset_postdata () Nach jeder Schleife können Sie verwenden WP_Query mehrmals, um mehrere Schleifen auf Ihrer Seite zu erstellen.