WordPress-Standard-Loop um Custom Post Types erweitern
In diesem Beitrag zeigen wir euch ein Snippet, mit dem ihr den WordPress-Standard-Loop um Custom Post Types erweitern könnt.
Um in WordPress »Custom Post Types« auf der Website anzuzeigen verwendet man meistens den sog. »WP Query«, da hier mit geringem Aufwand festgelegt werden kann, welche »Post Types« ausgegeben werden sollen. Für den Fall, dass ihr nicht »WP Query« nutzen möchtet oder könnt, zeigen wir euch in diesem Beitrag wie ihr den WordPress-Standard-Loop um Custom Post Types erweitern könnt.
WP-Loop um Custom Post Types erweitern
Der WordPress-Standard-Loop (»The Loop«) gibt standardmäßig keine Custom Post Types (CPTs) aus, sondern immer die Beiträge, die entsprechend der Template Hierarchie festgelegt wurden. Um den Standard-Loop um CPTs zu ergänzen, müsst ihr folgendes Snippet in die functions.php
eures Themes oder in ein seitenspezifisches Plugin schreiben. Die gewünschten Custom Post Types tragt ihr kommasepariert in das array
ein.
Meistens ist es gewünscht die Custom Post Types nur auf Übersichtsseiten, wie der »Home«-Seite oder in Archiven zusätzlich auszugeben. Diese Einschränkung erreicht ihr mit Hilfe der Conditional Tags »is_home()
« und »is_archive()
«.
Mit Hilfe der Aktion »pre_get_posts
« wird nun der Loop um eure Custom Post Types erweitert.
<?php function kb_add_post_types_to_loop($query) { if (!is_admin() && $query->is_main_query()) { if (is_home() || is_archive()) { $query->set('post_type', array('post', 'YOUR POSTTYPE 1', 'YOUR POSTTYPE 2')); } } } add_action('pre_get_posts','kb_add_post_types_to_loop'); ?>
Möchtet ihr den Standard-Loop überall erweitern, denkt daran auch die Seiten »page
« mit in das array
zu schreiben.
Achtet immer darauf, dass ihr bei euren Loop-Anpassungen den Administrationsbereich mit Hilfe von »!is_admin()« ignoriert, um Fehler im Backend zu verhindern.
Hallo Robert,
vielen Dank für diese Anpassung des Loops. Hat mir gerade wirklich weitergeholfen.
Ein kleiner „Fehler“ hat sich aber drin versteckt: Mit deiner Funktion werden Seiten (post type „page“) aus dem Loop geschmissen. Die Anpassung der Query sollte also lauten:
$query->set(‚post_type‘, array(‚post‘, ‚page‘, ‚YOUR POSTTYPE 1‘, ‚YOUR POSTTYPE 2‘));
…oder irre ich mich?
Viele Grüße,
Matthias
Hallo Matthias,
vielen Dank für deinen Kommentar.
Wir haben den Artikel angepasst.
Du hast natürlich vollkommen Recht, dass die Seiten auch berücksichtigt werden müssen. Jedoch würden diese dann auch auf Übersichtsseiten, wo man sie nicht unbedingt haben möchte erscheinen. Dieser Fall scheint uns recht unwahrscheinlich.
Wir hoffen unsere Anpassungen am Artikel sind für dich so in Ordnung.
Viele Grüße
Robert
Genau die Funktion nach der ich letztens gesucht habe.
Wenn ich das jetzt etwas weiter spinnen will und nur die Custom Post Types einer bestimmten Kategorie haben will, wie sähe das aus?
Viele Grüße
Philipp
Hallo Philipp,
würdest du gerne in einer bestimmten Kategorie einen Custom Post Type hinzufügen oder den Standard-Loop um eine bestimmte Kategorie eines Custom Post Types ergänzen?
Viele Grüße
Robert
Hi Robert,
der Standard-Loop soll Posts und Custom Post Types einer Custom Taxonomy ausgeben.
Viele Grüße
Philipp
Hallo Philipp,
an dieser Stelle würde ich den Standard-Loop durch einen WP_Query ersetzen. Hier hast du deutlich mehr Möglichkeiten in den Argumenten des Loops.
Viele Grüße
Robert