Benutzerdefinierte WordPress-Abfragen – Mehrere Schleifen

Veröffentlicht: 2021-01-29

In den meisten Fällen zeigt das von Ihnen aktivierte Design beim Erstellen einer Website mit WordPress standardmäßig eine Startseite an, die Ihre letzten Beiträge auflistet, es sei denn, Sie wählen in den Admin-Optionen unter Einstellungen > Lesen die Anzeige einer statischen Seite aus. Aber was wäre, wenn Sie eine andere Auswahl an Inhalten anzeigen möchten, die weder eine statische Seite noch Ihre neuesten Beiträge sind? Glücklicherweise ist dies mit WordPress Multiple Loops möglich.

Mal sehen, wie das bewerkstelligt werden kann!

Verwenden Sie mehrere Schleifen auf Ihrer WordPress-Homepage

Bevor wir beginnen, ist es erwähnenswert, dass Sie diese Änderungen an Ihrer eigenen Website mit einem untergeordneten Design vornehmen sollten, da wir die Vorlagendateien Ihres Designs bearbeiten. Wenn Sie dies nicht tun, werden Sie feststellen, dass Sie alle vorgenommenen Änderungen verlieren, wenn Sie Ihr Design das nächste Mal aktualisieren. Hier erfahren Sie mehr über Child-Themes.

Unabhängig davon, welches Thema Sie verwenden, enthält die entsprechende PHP-Datei für die Homepage eine Standardschleife, die einige Beiträge anzeigt (in den meisten Fällen handelt es sich um kürzlich veröffentlichte Beiträge). Im Twenty Twenty-Theme zum Beispiel finden Sie den Code, der dies steuert, in der index.php -Datei um Zeile 79 herum.

 if ( have_posts() ) { $i = 0; while ( have_posts() ) { $i++; if ( $i > 1 ) { echo '<hr class="post-separator styled-separator is-style-wide section-inner" aria-hidden="true" />'; } the_post(); get_template_part( 'template-parts/content', get_post_type() ); } }

In einer Standardschleife wie dieser werden zwei wichtige globale Variablen verwendet:

  • Die $wp_query , die ein WP_Query -Klassenobjekt ist und ein WP-Datenbankabfrageergebnis enthält
  • Das $post , das das aktuelle WP_Post -Klassenobjekt ist.

Im obigen Codestück prüfen wir zuerst, ob es Posts gibt, die mit der globalen Funktion have_posts() werden sollen, und wenn ja, iterieren wir diese Posts innerhalb einer While-Schleife. Die globale Funktion the_post() ist diejenige, die Posts durchläuft und WordPress sagt, dass es zum nächsten Post gehen soll.

Wenn Sie diese Funktionen und Klassen im Detail sehen möchten, finden Sie sie in der Datei wp-includes/class-wp-query.php .

Für unser Beispiel haben wir das Thema Twenty Twenty aktiviert und dann 6 Posts unter einer Kategorie namens „Kategorie 1“ und 5 Service-Posts unter einer Kategorie namens „Services“ erstellt.

Um die Dinge einfach zu halten, halten wir den Schleifencode so einfach wie möglich, indem wir nur eine Liste der Posts-Titel anzeigen.

 if ( have_posts() ) { while ( have_posts() ) { the_post(); the_title( '<h3 class="entry-title">', '</h3>' ); } }

Das bedeutet, dass wir auf unserer Homepage so etwas sehen werden:

Erste Schritte Anpassen unserer Homepage-Ausgabe

Wie wir im obigen Screenshot gesehen haben, sehen wir, wenn wir unsere „Startseite“ besuchen, die 10 neuesten Posts, unabhängig von den Kategorien, die ihnen zugewiesen wurden.

Wir werden nun mit der Erstellung unserer eigenen benutzerdefinierten Homepage-Vorlage fortfahren, in die wir benutzerdefinierte Ausgaben einfügen.

Erstellen Sie dazu eine Datei namens custom-homepage.php und speichern Sie sie im Ordner Ihres Themes. Fügen Sie dieser Seite den folgenden Code hinzu:

 <?php /* * Template Name: My custom homepage template */ get_header(); if ( have_posts() ) { while ( have_posts() ) { the_post(); the_title( '<h4 class="example"></h4>' ); } } get_footer();

Gehen Sie dann zu Ihrem WordPress-Admin und erstellen Sie eine Seite mit dem Namen „Meine Homepage“ und wählen Sie „Meine benutzerdefinierte Homepage-Vorlage“ aus dem Dropdown-Menü „Vorlage“ als Vorlage aus.

Um dies dann zur Standard-Homepage zu machen, müssen Sie dies im Menü Einstellungen auswählen (Einstellungen > Lesen > Eine statische Seite).

Wenn Sie sich jetzt Ihre Homepage ansehen, sollten Sie nur den Seitentitel sehen, wenn Sie vom Frontend Ihrer Website aus gesehen werden.

Jetzt haben wir diese Einrichtung, fügen wir einige Abfragen zu unserer Vorlage „Meine benutzerdefinierte Homepage-Vorlage“ hinzu.

Hinzufügen benutzerdefinierter Abfragen

Unser Ziel in diesem Beispiel ist es, einige unserer neuesten Beiträge aus allen Kategorien anzuzeigen. Darunter zeigen wir Beiträge eines benutzerdefinierten Beitragstyps namens „Bücher“ an. Wenn Sie nicht wissen, wie Sie benutzerdefinierte Beitragstypen einrichten, lesen Sie den Artikel „Benutzerdefinierte WordPress-Beitragstypen manuell erstellen“. Das Einfügen eines benutzerdefinierten Beitragstyps ist natürlich völlig optional. Wenn Sie dies nicht möchten, überspringen Sie einfach die Schritte, in denen wir uns auf diesen Beitragstyp beziehen.

Beginnen wir damit, die aktuelle Schleife (zu finden in index.php etwa in Zeile 79) durch diese zu ersetzen:

 $args = array( 'posts_per_page' => 8, 'orderby', 'date', 'order', 'DESC' ); $query = new WP_Query( $args ); while ( $query->have_posts() ) : $query->the_post(); the_title( '<h4 class="example"></h4>' ); endwhile;

Diese Schleife bedeutet, dass Ihre Homepage jetzt Ihre 8 neuesten Beiträge anzeigt (wie unten gezeigt):

Wenn Sie dann den benutzerdefinierten Beitragstyp „Bücher“ (oder einen anderen benutzerdefinierten Beitragstyp) einschließen möchten, fügen wir eine zweite Schleife für die Buchbeiträge direkt unter der ersten Schleife wie folgt hinzu:

 echo '<h4>Books</h4>'; $args = array( 'post_type' => 'book', 'posts_per_page' => 8 ); $query = new WP_Query( $args ); while ($query->have_posts()) : $query->the_post(); the_title( '<h4 class="example"></h4>' ); endwhile;

Gehen Sie zum Frontend Ihrer Website und aktualisieren Sie die Seite, um zu bestätigen, dass alles wie erwartet funktioniert.

Brechen Sie eine benutzerdefinierte Abfrage in Teile

Es kann nützlich sein, eine benutzerdefinierte Abfrage in Teile aufzuteilen. Ein Grund dafür wäre, wenn Sie die erste Abfrage "unterbrechen" wollten, indem Sie Beiträge aus einer anderen Kategorie oder einem anderen Beitragstyp anzeigen, bevor Sie die anfängliche Schleife fortsetzen. Dies ist nützlich, wenn Sie beispielsweise die neuesten Beiträge aus einer Kategorie und dann andere Inhalte anzeigen möchten, bevor Sie schließlich mit weiteren „neuesten Beiträgen“ abschließen, um die Seite abzuschließen.

Lassen Sie uns darauf eingehen. Löschen Sie zunächst den Inhalt der Datei custom-homepage.php , die wir zuvor verwendet haben, und fügen Sie den folgenden Code ein.

 <?php /* * Template Name: My custom homepage template */ get_header(); //////////// // Services Posts loop echo '<h4>Services</h4>'; $args = array( 'posts_per_page' => 3, 'category_name'=> 'services' ); $services = new WP_Query( $args ); while ( $services->have_posts() ) : $services->the_post(); the_title( '<h4 class="example"></h4>' ); endwhile; // Books Posts in between echo '<h4>Books</h4>'; $args = array( 'post_type' => 'book', ); $books = new WP_Query( $args ); while ( $books->have_posts() ) : $books->the_post(); the_title( '<h4 class="example"></h4>' ); endwhile; // Resume Services Posts loop echo '<h4>More Services</h4>'; $args = array( 'offset' => '3', 'posts_per_page' => 3, 'category_name'=> 'services' ); $services = new WP_Query( $args ); while ( $services->have_posts() ) : $services->the_post(); the_title( '<h4 class="example"></h4>' ); endwhile; //////////// get_footer();

In der ersten Schleife rufen wir 3 Beiträge aus der Kategorie Dienste ab. Um die Beiträge der Kategorie Services in der dritten Schleife fortzusetzen und dabei Duplikate zu vermeiden, definieren wir einen Offset => 3 . Dies würde bedeuten, dass wir Folgendes sehen würden:

Natürlich können Sie den Offset-Wert auf jede gewünschte Zahl ändern.

Hinzufügen von benutzerdefinierten Beiträgen zur Abfrage „Neueste Beiträge“.

Was ist, wenn wir die Buchbeiträge in die neuesten Beiträge der Homepage aufnehmen möchten? Die Standardschleife enthält standardmäßig keine benutzerdefinierten Posts. So können wir das beheben.

Für diesen Abschnitt setzen wir die Leseeinstellungen für die Startseite auf „Ihre neuesten Beiträge“.

Der Weg, dem hier zu folgen ist, ist die Verwendung des pre_get_posts . Dieser Hook wird in der Datei wp-includes/class-wp-query.php und wird verwendet, um das $query Objekt und die Haupt-WordPress-Schleife nach Belieben anzupassen. Es wird ausgeführt, nachdem das Abfragevariablenobjekt erstellt wurde, aber bevor die eigentliche Abfrage ausgeführt wird.

Öffnen Sie die Datei functions.php Ihres aktiven Designs und fügen Sie am Ende den folgenden Code ein:

 function homepage_add_cpt( $query ) { if ( $query->is_main_query() && is_home() ) { $query->set( 'post_type', array( 'post', 'book' ) ); } } add_action( 'pre_get_posts', 'homepage_add_cpt' );

Was dieser Code in der if -Bedingung bewirkt, ist sicherzustellen, dass die Änderungen auf der Homepage nur angewendet werden, während die Hauptabfrage ausgeführt wird.

Wenn Sie jetzt Ihre Homepage besuchen, werden Sie feststellen, dass in den neuesten Posts auch die benutzerdefinierten „Buch“-Posts enthalten sind.

Fazit

Fast ausnahmslos ist alles möglich, was Sie inhaltlich für Ihre WordPress-Homepage erreichen wollen. Wie wir hier gezeigt haben, ist die Verwendung von WordPress Multiple Loops eine leistungsstarke Möglichkeit, die Ausgabe anzupassen, die auf Ihrer Homepage erscheint. Unser Ansatz hier ist nur einer von vielen. WordPress bietet ein unglaubliches Maß an Kontrolle über die Ausgabe, die auf Ihrer Website erscheint. Experimentieren Sie mit den Tools, die sie bereitstellen, um das zu erreichen, was Sie wollen!