WordPress.org

Sprachen: English * Français • Italiano * Loop 日本語 Português do Brasil • Русский • 中文(简体) • 中文(繁體) • (Fügen Sie Ihre Sprache hinzu)

Die Schleife ist PHP-Code, der von WordPress verwendet wird, um Beiträge anzuzeigen. Mithilfe der Schleife verarbeitet WordPress jeden Beitrag, der auf der aktuellen Seite angezeigt werden soll, und formatiert ihn entsprechend den angegebenen Kriterien in den Loop-Tags. Jeder HTML- oder PHP-Code in der Schleife wird für jeden Beitrag verarbeitet.

Wenn in der WordPress-Dokumentation „Dieses Tag muss sich innerhalb der Schleife befinden“ angegeben ist, z. B. für bestimmte Vorlagen-Tags oder Plugins, wird das Tag für jeden Beitrag wiederholt. Beispielsweise zeigt die Schleife standardmäßig die folgenden Informationen für jeden Beitrag an:

  • Titel (the_title())
  • Zeit (the_time())
  • Kategorien (the_category()).

Sie können weitere Informationen zu jedem Beitrag anzeigen, indem Sie die entsprechenden Vorlagen-Tags verwenden oder (für fortgeschrittene Benutzer) auf die Variable $post zugreifen, die mit den Informationen des aktuellen Beitrags festgelegt wird, während die Schleife ausgeführt wird.

Für einen Anfängerblick auf die Schleife, siehe Die Schleife in Aktion.

Verwenden der Schleife

Die Schleife sollte im Index des Themas platziert werden.php und in anderen Vorlagen, die zum Anzeigen von Post-Informationen verwendet werden.

Stellen Sie sicher, dass Sie den Aufruf für die Header-Vorlage oben in den Vorlagen Ihres Themas einfügen. Wenn Sie die Schleife in Ihrem eigenen Design verwenden (und Ihr eigenes Design keine Vorlage ist), setzen Sie WP_USE_THEMES auf false:

<?php define( 'WP_USE_THEMES', false ); get_header(); ?>

Die Schleife beginnt hier:

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>

und endet hier:

<?php endwhile; else : ?><p><?php esc_html_e( 'Sorry, no posts matched your criteria.' ); ?></p><?php endif; ?>

Dies verwendet die alternative Syntax von PHP für Kontrollstrukturen und könnte auch ausgedrückt werden als:

<?php if ( have_posts() ) {while ( have_posts() ) {the_post(); //// Post Content here//} // end while} // end if?>

Loop Examples

Style Posts From Some Category Differently

In diesem Beispiel wird jeder Beitrag mit seinem Titel (der als Link zum Permalink des Beitrags verwendet wird), Kategorien und Inhalten angezeigt. Außerdem können Beiträge in einer Kategorie mit der Kategorie-ID ‚3‘ anders gestaltet werden. Um dies zu erreichen, wird das Template-Tag in_category() verwendet. Lesen Sie die Kommentare sorgfältig durch, um zu sehen, was jeder Teil des Codes tut.

Hinweis: Alle HTML-Code muss außerhalb der <?php ?> Markierungen. Und PHP-Code (auch Dinge so einfach wie geschweifte Klammern: } ) muss innerhalb der < sein?php ?> Markierungen. Sie können PHP-Codeblöcke starten und stoppen, um HTML-Code in if- und else-Anweisungen einzustreuen, wie im obigen Beispiel gezeigt.

Beiträge aus einer Kategorie ausschließen

In diesem Beispiel wird gezeigt, wie eine bestimmte Kategorie oder Kategorien nicht angezeigt werden. In diesem Fall sind Beiträge aus den Kategorien 3 und 8 ausgeschlossen. Das Beispiel unterscheidet sich vom obigen Beispiel dadurch, dass es eine Änderung an der Abfrage selbst vornimmt.

Hinweis: Wenn Sie dieses Beispiel für Ihre Hauptseite verwenden, sollten Sie eine andere Vorlage für Ihre Kategoriearchive verwenden. Andernfalls schließt WordPress alle Beiträge in Kategorie 3 und Kategorie 8 aus, auch wenn Sie dieses Kategoriearchiv anzeigen! Wenn Sie jedoch dieselbe Vorlagendatei verwenden möchten, können Sie dies vermeiden, indem Sie das Tag is_home() , um sicherzustellen, dass Beiträge aus Kategorie 3 und Kategorie 8 nur von der Hauptseite ausgeschlossen werden:

...<?php if ( is_home() ) {$query = new WP_Query( 'cat=-3,-8' );if ( $query->have_posts() ) : while ( $query->have_posts() ) : $query->the_post(); } else {...?>...

Es gibt andere bedingte Tags, mit denen die Ausgabe gesteuert werden kann, je nachdem, ob eine bestimmte Bedingung in Bezug auf die angeforderte Seite zutrifft oder nicht.

Objektorientierung

Schleifen sind eine Kombination aus objektorientiertem und globalem Verhalten. Dies ist zunächst verwirrend.

Die beiden wichtigen globalen Variablen für Schleifen sind:

  • $ wp_query ist ein Objekt der Klasse WP_Query, das ein WP-Datenbankabfrageergebnis enthält, unter dem $wp_query->posts , ein Array einzelner WP_Posts .
  • $post ist das aktuelle Objekt der Klasse WP_Post

Denken Sie daran: Alle Template-Tags basieren standardmäßig auf der globalen Variablen $post und die globale Variable $post wird von the_post() gesetzt / geändert, das seine Daten von der globalen Variablen $wp_query erhält. $post wird auch von WP_Query::the_post() gesetzt / geändert, wie es in sekundären Schleifen verwendet wird.

Mehrere Schleifen

Dieser Abschnitt befasst sich mit der erweiterten Verwendung der Schleife. Es ist ein bisschen technisch, aber lass dich davon nicht erschrecken. Wir beginnen mit einem einfachen Beispiel und arbeiten von dort aus. Mit ein wenig gesundem Menschenverstand, Geduld und Enthusiasmus können auch Sie mehrere Schleifen ausführen.

Zunächst einmal, warum sollte man mehrere Schleifen verwenden wollen? Im Allgemeinen lautet die Antwort, dass Sie möglicherweise etwas mit einer Gruppe von Posts und etwas anderes mit einer anderen Gruppe von Posts tun möchten, aber beide Gruppen auf derselben Seite anzeigen möchten. „Etwas“ könnte fast alles bedeuten; Sie sind nur durch Ihre PHP-Fähigkeiten und Ihre Vorstellungskraft begrenzt.

Wir werden unten auf Beispiele eingehen, aber zuerst sollten Sie die Grundlagen lesen. Schauen Sie sich die grundlegende Schleife an. Es besteht aus:

<?php if ( have_posts() ) : ?><?php while ( have_posts() ) : the_post(); ?> <!-- do stuff ... --><?php endwhile; ?><?php endif; ?>

Ein wenig beiseite zu Do stuff: In diesem Beispiel ist es einfach ein Platzhalter für eine Reihe von Code, der bestimmt, wie jeder Beitrag auf einer Seite formatiert und angezeigt wird. Dieser Code kann sich ändern, je nachdem, wie Ihr WordPress aussehen soll. Wenn Sie sich den Index des Kubrick-Themas ansehen.php der do stuff Abschnitt wäre alles unten:

<?php while ( have_posts() ) : the_post(); ?>

Nach oben:

<?php comments_popup_link( 'No Comments "', '1 Comment "', '% Comments "' ); ?>

Eine Erklärung für die Programmierer da draußen: Die have_posts() und the_post() sind praktische Wrapper um das globale $wp_query Objekt, in dem sich die gesamte Aktion befindet. Die $wp_query wird im Blog-Header aufgerufen und mit Abfrageargumenten gefüttert, die über GET und PATH_INFO eingehen. Die $wp_query nimmt die Argumente und erstellt und führt eine DB-Abfrage aus, die zu einem Array von Posts führt. Dieses Array wird im Objekt gespeichert und auch an den Blog-Header zurückgegeben, wo es in das globale Array $posts eingefügt wird (aus Gründen der Abwärtskompatibilität mit alten Post-Schleifen).

Sobald WordPress den Blog-Header geladen hat und in die Vorlage absteigt, gelangen wir zu unserer Post-Schleife. Die have_posts() ruft einfach $wp_query->have_posts() auf, die einen Schleifenzähler überprüft, um festzustellen, ob noch Beiträge im Post-Array vorhanden sind. Und the_post() ruft $wp_query->the_post() auf, wodurch der Schleifenzähler vorgerückt und die globale Variable $ post sowie alle globalen Post-Daten eingerichtet werden. Sobald wir die Schleife erschöpft haben, gibt have_posts() false zurück und wir sind fertig.

Schleifenbeispiele

Im Folgenden finden Sie drei Beispiele für die Verwendung mehrerer Schleifen. Der Schlüssel zur Verwendung mehrerer Schleifen ist, dass $ wp_query nur einmal aufgerufen werden kann. Um dies zu umgehen, können Sie die Abfrage wiederverwenden, indem Sie rewind_posts() aufrufen oder ein neues Abfrageobjekt erstellen. Dies wird in Beispiel 1 behandelt. In Beispiel 2 wird die Verwendung einer Variablen zum Speichern der Ergebnisse einer Abfrage behandelt. Schließlich bringt ‚Multiple Loops in Action‘ eine Reihe von Ideen zusammen, um eine Möglichkeit zu dokumentieren, mehrere Loops zu verwenden, um Beiträge einer bestimmten Kategorie auf der Homepage Ihres Blogs zu bewerben.

Mehrere Schleifen Beispiel 1

Um dieselbe Abfrage ein zweites Mal zu durchlaufen, rufen Sie rewind_posts() auf. Dadurch wird der Schleifenzähler zurückgesetzt und Sie können eine weitere Schleife ausführen.

<?php rewind_posts(); ?> <?php while ( have_posts() ) : the_post(); ?><!-- Do stuff... --><?php endwhile; ?>

Wenn Sie mit den Posts in der ursprünglichen Abfrage fertig sind und eine andere Abfrage verwenden möchten, können Sie das $wp_query-Objekt wiederverwenden, indem Sie query_posts() aufrufen und dann eine Schleife durchlaufen. Die query_posts() führt eine neue Abfrage aus, erstellt ein neues Posts-Array und setzt den Schleifenzähler zurück.

Wenn Sie die ursprüngliche Abfrage beibehalten müssen, können Sie ein neues Abfrageobjekt erstellen.

Mehrere Schleifen Beispiel 2

Eine andere Version der Verwendung mehrerer Schleifen erfordert einen anderen Ansatz, um die Unfähigkeit zu umgehen, have_posts() und the_post() . Um dies zu lösen, müssen Sie die ursprüngliche Abfrage in einer Variablen speichern und sie dann mit der anderen Schleife neu zuweisen. Auf diese Weise können Sie alle Standardfunktionen verwenden, die auf allen Globals basieren.

Beispiel:

Hinweis: In PHP 5 werden Objekte wie in PHP 4 mit dem Operator „= clone“ anstelle von „=“ referenziert. Damit Beispiel 2 in PHP 5 funktioniert, müssen Sie den folgenden Code verwenden:

Dieses zweite Beispiel funktioniert jedoch nicht in WordPress 2.1.

Mehrere Schleifen in Aktion

Der beste Weg, um zu verstehen, wie mehrere Schleifen verwendet werden, besteht darin, ein Beispiel für deren Verwendung zu zeigen. Die vielleicht häufigste Verwendung mehrerer Schleifen besteht darin, zwei (oder mehr) Listen von Beiträgen auf einer Seite anzuzeigen. Dies geschieht häufig, wenn ein Webmaster nicht nur den neuesten Beitrag, sondern auch Beiträge aus einer bestimmten Kategorie veröffentlichen möchte.

Wenn wir alle Formatierungs- und CSS-Probleme beiseite lassen, nehmen wir an, wir möchten zwei Listen mit Beiträgen haben. Eine, die die neuesten Beiträge auflisten würde (die Standard 10 Beiträge zuletzt hinzugefügt), und eine andere, die nur einen Beitrag aus der Kategorie ‚featured‘ enthalten würde. Beiträge in der Kategorie ‚Featured‘ sollten zuerst angezeigt werden, gefolgt von der zweiten Liste der Beiträge (der Standard). Der Haken ist, dass in beiden Kategorien kein Beitrag erscheinen sollte.

Schritt 1. Holen Sie sich nur einen Beitrag aus der Kategorie ‚Featured‘.

Auf Englisch würde der obige Code lauten:

Setze $my_query gleich dem Ergebnis der Abfrage aller Beiträge, in denen die Kategorie featured heißt, und erhalte übrigens nur einen Beitrag. Setzen Sie außerdem die Variable $ do_not_duplicate gleich der ID-Nummer des einzelnen zurückgegebenen Beitrags. Denken Sie daran, dass die Do stuff-Zeile alle Formatierungsoptionen darstellt, die dem abgerufenen Beitrag zugeordnet sind.

Beachten Sie, dass wir im nächsten Schritt den Wert von $do_not_duplicate benötigen, um sicherzustellen, dass derselbe Beitrag nicht in beiden Listen angezeigt wird.

Schritt 2. In der zweiten Schleife erhalten Sie die X neuesten Beiträge (außer einem).

Der folgende Code ruft X aktuelle Beiträge (wie in den WordPress-Einstellungen definiert) ab, die bereits aus der ersten Schleife angezeigt wurden, und zeigt sie gemäß Do stuff an.

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); if ( $post->ID == $do_not_duplicate ) continue;?><!-- Do stuff... --><?php endwhile; endif; ?>

Auf Englisch würde der obige Code lauten:

Holen Sie sich alle Beiträge, wobei ein Beitrag $do_not_duplicate entspricht, und tun Sie dann einfach nichts (weiter). Aktualisieren Sie auch den Cache, damit die Tagging- und Keyword-Plugins gut funktionieren. Recall, $do_not_duplicate Variable enthält die ID des Beitrags bereits angezeigt.

Das Endergebnis

So sieht der letzte Code ohne Formatierung aus:

Das Endergebnis wäre eine Seite mit zwei Listen. Die erste Liste enthält nur einen Beitrag – den neuesten Beitrag aus der Kategorie ‚Feature‘. Die zweite Liste enthält X aktuelle Beiträge (wie in den WordPress-Einstellungen definiert) mit Ausnahme des Beitrags, der bereits in der ersten Liste angezeigt wird. Sobald der Feature-Beitrag durch einen neuen ersetzt wurde, wird das vorherige Feature im Abschnitt Beitragsliste unten angezeigt (abhängig davon, wie viele Beiträge Sie anzeigen möchten und wie häufig der Beitrag angezeigt wird). Diese Technik (oder ähnliches) wurde von vielen in Verbindung mit der Kenntnis der Vorlagenhierarchie verwendet, um ein anderes Aussehen für zu Hause zu schaffen.php und Index.PHP. Siehe zugehörige Ressourcen am Ende dieser Seite.

Hinweis Für mehrere Beiträge in der ersten Kategorie

Wenn posts_per_page=2 oder mehr ist, müssen Sie den Code ein wenig ändern. Die Variable $ do_not_duplicate muss im Gegensatz zu einem einzelnen Wert in ein Array geändert werden. Andernfalls wird die erste Schleife beendet und die Variable $ do_not_duplicate entspricht nur der ID des letzten Beitrags. Dies führt zu doppelten Posts in der zweiten Schleife. Um das Problem zu beheben, ersetzen Sie

durch

Beachten Sie, dass „posts_per_page“ eine beliebige Zahl sein kann.Dies ändert $do_not_duplicate in ein Array. Ersetzen Sie dann

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); if ( $post->ID == $do_not_duplicate ) continue; ?>

durch

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); if ( in_array( $post->ID, $do_not_duplicate ) ) continue; ?>

, wobei Sie das Muster für posts_per_page gleich posts_per_page (in diesem Fall 2) .

Alternativ können Sie das gesamte Array $do_not_duplicate an $wp_query übergeben und nur Einträge zurückgeben, die Ihren Kriterien entsprechen:

<?php query_posts( array( 'post__not_in' => $do_not_duplicate ) );if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> 

Beachten Sie, dass der Abfrageparameter anstelle einer Zeichenfolge ein assoziatives Array war, das die Option post__not_in .

Verschachtelte Schleifen

Verschachtelte Schleifen bedeuten, dass Sie eine zweite Schleife ausführen, bevor Sie die erste beenden. Dies kann beispielsweise nützlich sein, um eine Beitragsliste mit einem Shortcode anzuzeigen.

$my_query = new WP_Query( 'cat=3' );if ( $my_query->have_posts() ) { while ( $my_query->have_posts() ) { $my_query->the_post();the_content();}}wp_reset_postdata();

Es ist notwendig, die Daten der Hauptschleife nach einer verschachtelten Schleife zurückzusetzen, damit einige globale Variablen wieder die richtigen Werte enthalten.

Quellen

Der Abschnitt über mehrere Schleifen ist eine Kombination aus Ryan Boren und Alex Kings Diskussion über die Schleife auf der Hacker-Mailingliste. Das Beispiel für verschachtelte Schleifen wurde von einer anderen Diskussion auf der Mailingliste und einem Beitrag von Nicolas Kuttler inspiriert.

Ressourcen

  • WordPress WP_Query Generator
  • Einstieg in die Schleife – (Folien) eine Einführung, wie Plugins und Themes die Schleife ändern können
  • WordPress Benutzerdefinierte Schleife
  • WordPress WP_Query Loop Generator

Verwandte

Um mehr über die WordPress-Schleife und die verschiedenen Vorlagen-Tags zu erfahren, die nur innerhalb der Schleife funktionieren, finden Sie hier weitere Ressourcen:

Mehr über die Schleife

  • Artikel: Die Schleife in Aktion
  • Artikel: Vorlagen-Tags
  • Artikel: Verwenden der Schleife in Vorlagendateien

Artikel

  • Artikel: Die Schleife – Ein grundlegender Überblick über die Verwendung von Abfragen in der WordPress-Schleife.
  • Artikel: Abfrageübersicht – Erklärung, wie Sie bestimmen, welche Abfragen WordPress generieren.
  • Artikel: Abfragen über Hook anpassen
  • Artikel: Artikel anzeigen MYSQL-Abfrage mit benutzerdefinierten
  • Artikel: Erstellen Sie erweiterte Abfragen zu Taxonomien
  • Artikel: Erstellen Sie benutzerdefinierte Abfragen mit Offset und Paginierung

Code-Dokumentation

  • : WP_Query – Detaillierte Übersicht der Klasse WP_Query
  • Klasse: WP_Comment_Query – Klasse für kommentarbezogene Abfragen
  • Klasse: WP_User_Query – Klasse für benutzerbezogene Abfragen
  • Objekt: $wpdb – Übersicht über die Verwendung des $wpdb-Objekts
  • Funktion: set_query_var()
  • Funktion: get_query_var()
  • Funktion: query_posts() – Erstellen Sie eine zusätzliche benutzerdefinierte Abfrage
  • Funktion: get_post() – Nehmen Sie eine ID eines Elements und geben Sie die Datensätze in der Datenbank für diesen Artikel zurück
  • Funktion: get_posts() – Eine spezialisierte Funktion, die ein Array von Elementen zurückgibt
  • Funktion: get_pages() – Eine spezialisierte Funktion, die ein Array von Seiten zurückgibt
  • Funktion: have_posts() – Eine Bedingung, die bestimmt, ob die Abfrage einen Artikel zurückgegeben hat
  • Funktion: the_post() – Wird verwendet, um die Schleife nach einer Abfrage automatisch festzulegen
  • Funktion: rewind_posts ) – Löscht die aktuelle Schleife
  • Funktion: setup_postdata() – Setzt die Daten für ein einzelnes Abfrageergebnis innerhalb einer Schleife
  • Funktion: wp_reset_postdata() – Stellt die vorherige Abfrage wieder her (normalerweise nach einer Schleife innerhalb einer anderen Schleife)
  • Funktion: wp_reset_query()
  • Funktion: is_main_query() – Stellt sicher, dass die zu ändernde Abfrage nur die Hauptabfrage ist
  • Aktionshaken: pre_get_posts – Ändern Sie WordPress-Abfragen, bevor sie ausgeführt werden
  • Aktionshaken: Hook: the_post – Ändern Sie das Post-Objekt nach der Abfrage
  • Filter Hook: found_posts – Ändert den Wert des Objekts found_posts WP_Query
Dieser Artikel ist als bearbeitungsbedürftig gekennzeichnet. Sie können Codex helfen, indem Sie es bearbeiten.

You might also like

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.