WordPress: Loops mit WP_Query
Wenn Inhalte in WordPress automatisiert angezeigt werden sollen, kommt in den meisten Fällen ein individueller Loop auf Basis von WP_Query zum Einsatz. WP_Query ist sehr mächtig aber dennoch schnell konfiguriert.
Der Loop ist das zentrale Herzstück von WordPress und sorgt dafür, dass die Inhalte einer Website oder eines Blogs an der passenden Stelle angezeigt werden. Bei anspruchsvolleren Projekten stößt der Standard-Loop von WordPress allerdings schnell an seine Grenzen, weshalb es noch einige andere Möglichkeiten gibt um Inhalte und Beiträge auszugeben. Neben pre_get_posts
, get_posts
und query_posts
ist ein Loop mit Hilfe von WP-Query
eine sehr mächtige und daher populäre Alternative.
Vorteile des WP_Query gegenüber dem Standard-Loop
Der Standard-Loop von WordPress zeigt immer die Beiträge/Inhalte, die entsprechend der Template-Hierarchie angezeigt werden sollen. WordPress erkennt automatisch anhand der URL-Struktur welche Inhalte das sind. Befindet sich ein Besucher beispielsweise auf der Blog-Übersicht, wird folglich eine Übersicht der Blog-Beiträge angezeigt, befindet er sich in der Detailansicht einer statischen Seite, sieht man erwartungsgemäß die Inhalte dieser Seite usw.
Der Standard-Loop stößt an seine Grenzen, wenn man als Theme-Entwickler Inhalte an einer Stelle anzeigen möchte, an der sie entsprechend der Template-Hierarchie eigtl. nicht angezeigt werden dürften. Wenn ihr also beispielsweise auf einer statischen Unterseite zusätzlich zum Inhalt dieser Seite auch die neuesten drei Blog-Posts anzeigen möchtet, benötigt ihr einen zusätzlichen Loop, der dazu in der Lage ist. WP-Query
ist ein solcher Loop.
WordPress-Loop mit WP_Query erstellen
Mit dem nachfolgenden Code zeigt ihr Inhalte in WordPress mit Hilfe von WP_Query
an. Welche Inhalte das sind, konfiguriert ihr über den vorgelagerten Array ($args
). Dabei stehen zahlreiche Werte zur Verfügung.
Wichtig ist, dass der WP_Query
-Loop am Ende resettet wird, da es ansonsten zu Fehlfunktionen kommen kann, wenn mehrere Loops auf einer Seite angezeigt werden.
<?php
$args = array(
/* Hier wird definiert welche Beiträge geladen werden sollen */
);
$custom_query = new WP_Query($args);
if ($custom_query->have_posts()) : while($custom_query->have_posts()) : $custom_query->the_post(); ?>
<!-- Start der geloopten Inhalte -->
<h1><?php the_title(); ?></h1>
<?php the_content();?>
<!-- Ende der geloopten Inhalte -->
<?php endwhile; else : ?>
<p>Keine Beiträge</p>
<?php endif; wp_reset_postdata(); ?>
Argumente des WP_Query
Wie oben beschrieben kann mit Argumenten festgelegt werden, welche Beiträge angezeigt werden sollen. Im WordPress-Codex werden alle Optionen zusammengefasst. Der folgende Code lädt 5 Beiträge des Post Types »Termine« in alphabetischer, absteigender Reihenfolge.
$args = array(
'post_type' => 'termine',
'posts_per_page' => 5,
'orderby' => 'title',
'order' => 'ASC'
);
Vollständiges Beispiel
Das voll funktionsfähige Beispiel sieht dann so aus:
<?php
$args = array(
'post_type' => 'termine',
'posts_per_page' => 5,
'orderby' => 'title',
'order' => 'ASC'
);
$custom_query = new WP_Query($args);
if ($custom_query->have_posts()) : while($custom_query->have_posts()) : $custom_query->the_post(); ?>
<h1><?php the_title(); ?></h1>
<?php the_content();?>
<?php endwhile; else : ?>
<p>Keine Beiträge</p>
<?php endif; wp_reset_postdata(); ?>
Bitte beachtet, dass ihr beim Einsatz einer Pagination ggf. eine Anpassung am Loop vornehmen müsst. Weitere Informationen findet ihr hier.