WordPress Template‑Hierarchie

1) Core‑Prinzip

WordPress arbeitet mit einer Prioritätsliste pro Seitentyp. Die spezifischste gefundene Datei gewinnt. Wenn nichts passt, fällt alles auf „ zurück (muss in jedem Theme existieren).


2) Startseite / Blog – front-page.php vs. home.php

Startseite ()

  1. front-page.php
  2. (Wenn „Neueste Beiträge“ als Startseite) → home.phpindex.php
  3. (Wenn „Statische Seite“ als Startseite) → page-{slug}.phppage-{id}.phppage.phpsingular.phpindex.php

Blog‑Index (Beiträge‑Übersicht)

  1. home.php
  2. index.php

Merksatz: front-page.php = Startseiten‑Layout. home.php = Blogliste (egal wo sie liegt).


3) Einzelseiten (Pages) – page.php

Aufruf einer Seite (Post‑Type )

  1. page-{slug}.php (z. B. page-about.php)
  2. page-{id}.php
  3. page.php
  4. singular.php
  5. index.php

Seitentemplates (frei zuweisbar)

<?php /* Template Name: Landing Page */ ?>

→ Eigene Datei mit Header kommentieren. Diese kannst du im Editor für eine Seite auswählen. Hat Priorität vor der obigen Liste.


4) Einzelne Beiträge – single.php & single-post.php

Aufruf eines Beitrags (Post‑Type )

  1. single-post.php
  2. single.php
  3. singular.php
  4. index.php

Custom Post Types

  • single-{posttype}.php (z. B. single-portfolio.php)
  • Fallbacks wie oben.

Hinweis: Eine Datei post.php gehört nicht zur Hierarchie. Gemeint ist meist single.php oder single-post.php.


5) Archive & Listen

  • Allgemeines Archiv: archive.phpindex.php
  • Custom Post Type Archiv: archive-{posttype}.phparchive.phpindex.php
  • Kategorie: category-{slug}.phpcategory-{id}.phpcategory.phparchive.phpindex.php
  • Tag: tag-{slug}.phptag-{id}.phptag.phparchive.phpindex.php
  • Autor: author-{nicename}.phpauthor-{id}.phpauthor.phparchive.phpindex.php
  • Datum: date.phparchive.phpindex.php
  • Taxonomie‑Term: taxonomy-{taxonomy}-{term}.phptaxonomy-{taxonomy}.phptaxonomy.phparchive.phpindex.php

6) Suche, Fehler & Anhänge

  • Suche: search.phpindex.php
  • 404: 404.php (kein Fallback – wenn fehlt, sieht man je nach Theme leere/unerwartete Ausgabe)
  • Attachment: image.php / video.php / audio.php / application.phpattachment.phpsingle-attachment.phpsingle.phpsingular.phpindex.php

7) Entscheidungsbaum (vereinfachte Sicht)

/ (Root)?
  ├─ front-page.php vorhanden? → ja → rendern
  └─ WP-Einstellung „Neueste Beiträge“?
      ├─ ja → home.php → index.php
      └─ nein (statische Seite) → page-{slug}.php → page-{id}.php → page.php → singular.php → index.php

Einzelner Inhalt (singular)?
  ├─ Typ page → page-{slug}.php → page-{id}.php → page.php → singular.php → index.php
  └─ Typ post oder CPT → single-{post_type}.php → single.php → singular.php → index.php

Archiv (listing)?
  ├─ Spezifische Datei (category-*, tag-*, taxonomy-*, author-*, date, archive-{post_type})
  └─ archive.php → index.php

Sonderfälle: search.php | 404.php | attachment‑Templates


8) Best Practices im Theme

  • „ minimal halten (Fallback), eigentliche Layouts in spezifische Templates auslagern.
  • Header/Footer/Loops in template-parts/ kapseln (gettemplatepart('template-parts/content','post')).
  • Keine Logik duplizieren: Nutze singular.php als generisches Single‑Fallback.
  • „ nur, wenn du wirklich eine dedizierte Startseite willst.
  • Für den Blog‑Index immer eine „ anlegen.
  • 404 nicht vergessen – bessere UX & SEO.

9) Pinegrow‑Tipps

  • Lege gezielt die Dateien an, die du brauchst (front-page.php, home.php, single-post.php, page.php).
  • Nutze Smart Components / Template Parts für wiederkehrende Blöcke (Hero, Cards, Footer).
  • Für Customizer‑abhängige Inhalte (z. B. Hintergründe) nicht mit Inline‑Styles binden, sondern via CSS‑Variablen (siehe anderes How‑To).
  • Prüfe in der Pinegrow‑Vorschau, welche Datei gerendert wird (URL & Seitentyp beachten).

10) Mini‑Snippets

Standard‑Loop (Archiv/Blogliste)

<?php if (have_posts()): ?>
  <?php while (have_posts()): the_post(); ?>
    <?php get_template_part('template-parts/content', get_post_type()); ?>
  <?php endwhile; ?>
  <?php the_posts_pagination(); ?>
<?php else: ?>
  <p><?php _e('Keine Inhalte gefunden.', 'wpcgrau'); ?></p>
<?php endif; ?>

Single (Beitrag)

<?php while (have_posts()): the_post(); ?>
  <?php get_template_part('template-parts/content', 'single'); ?>
  <?php the_post_navigation(); ?>
  <?php comments_template(); ?>
<?php endwhile; ?>

Seitentemplate Header

<?php /* Template Name: Landing Page */ ?>


11) Häufige Missverständnisse

  • ≠ Startseite. Es ist die Blogliste.
  • ` ist kein offizielles Template. Gemeint ist meist single-post.php`.
  • Kein Fallback für „ – diese Datei explizit anlegen.

12) Checkliste: Welche Datei brauche ich?

  • Eigene Startseite (Hero, Sektionen): „
  • Blogliste (Beiträge): „
  • Einzelner Blogpost: ` (oder single.php` für alle)
  • Statische Standardseite: ` (ggf. page-{slug}.php` für Spezialseiten)
  • Beliebige Singles (Fallback): „
  • Sammlung/Listen: „ (+ spezifische Varianten)
  • Suche: „
  • Fehlerseite: „