kulturbanause Blog

Responsive Design, WordPress, Konzeption, HTML, CSS, JS & UX/UI …

WordPress-Standard-Loop um Custom Post Types erweitern

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.

Workshops und Seminare von kulturbanause

Adobe XD, Performance, Responsive Design, Sketch, Visual Prototyping, Web Animationen, Corporate Design …

Jetzt Frühbucher-Rabatte sichern!

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.

Jetzt bist du gefragt!

Hast du Anregungen, Ergänzungen, einen Fehler gefunden oder ist dieser Beitrag nicht mehr aktuell? Dann freuen wir uns auf deinen Kommentar.

Du kannst diesen Beitrag natürlich auch weiterempfehlen. Wir sind dir für jede Unterstützung dankbar!

Unterstützung bei WordPress-Projekten

Unsere WordPress Agentur ist auf die Entwicklung maßgeschneiderter WordPress-Themes und -Websites spezialisiert. Wenn du Unterstützung bei der Planung, Gestaltung und Entwicklung eines Projekts benötigst, helfen wir gerne weiter.
WordPress-Leistungsangebot →

Das könnte dich auch interessieren

6 Kommentare

  1. Philipp

    Verfasst am 27. Februar 2018 um 13:05 Uhr.

    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

    • Robert Menzel

      Verfasst am 1. März 2018 um 10:10 Uhr.

      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

      • Philipp

        Verfasst am 2. März 2018 um 14:48 Uhr.

        Hi Robert,

        der Standard-Loop soll Posts und Custom Post Types einer Custom Taxonomy ausgeben.

        Viele Grüße

        Philipp

      • Robert Menzel

        Verfasst am 5. März 2018 um 11:28 Uhr.

        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

  2. Matthias

    Verfasst am 23. August 2019 um 13:05 Uhr.

    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

    • Robert Menzel

      Verfasst am 26. August 2019 um 12:01 Uhr.

      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

Kommentar verfassen

Dieser Blog lebt vom Feedback der Besucher! Also los, mach mit!
Bitte habe Verständnis dafür, dass Kommentare die mit dem Inhalt dieses Beitrags nichts zu tun haben, gelöscht werden.