Template-Hierarchie für WordPress-Block-Themes
Die vollständige Template-Hierarchie für Block-Themes (FSE): für jeden Anfragetyp die geordnete Liste der Templates, die WordPress sucht – vom spezifischsten zuerst bis zum Rückgriff auf index.html. Das Gegenstück zum klassischen Hierarchie-Diagramm für die Block-Ära.
Für jede Anfrage sucht WordPress diese Templates der Reihe nach — das spezifischste zuerst — und hält beim ersten an, das im Ordner /templates deines Themes existiert. Die Kette endet immer bei index.html.
Startseite
Die Startseite der Website – unabhängig davon, ob dort deine neuesten Beiträge oder eine statische Seite angezeigt werden.
- front-page.html
- home.html
- index.html
front-page.html hat Vorrang, unabhängig von der Auswahl unter Einstellungen → Lesen. Ist die Startseite eine statische Seite und existiert keine front-page.html, greift die Kette für statische Seiten – nicht home.html.
Beitragsübersicht
Die Seite, auf der deine neuesten Beiträge aufgelistet werden (die „Beitragsseite“ unter Einstellungen → Lesen).
- home.html
- index.html
Einzelner Beitrag
Ein einzelner Blog-Beitrag.
- single-post-{slug}.html
- single-post.html
- single.html
- singular.html
- index.html
Einzelner Custom Post Type
Ein einzelner Eintrag eines Custom Post Types (z. B. ein „Buch“).
- single-{post-type}-{slug}.html
- single-{post-type}.html
- single.html
- singular.html
- index.html
Für einen Post Type „book“ mit dem Slug „dune“: single-book-dune.html, dann single-book.html, dann single.html.
Statische Seite
Eine normale WordPress-Seite.
- page-{slug}.html
- page-{id}.html
- page.html
- singular.html
- index.html
Seite mit benutzerdefiniertem Template
Eine Seite, der im Template-Bereich des Editors ein benutzerdefiniertes Template zugewiesen wurde.
- {custom-template}.html
- page-{slug}.html
- page-{id}.html
- page.html
- singular.html
- index.html
Benutzerdefinierte Templates werden im customTemplates-Array der theme.json deklariert und liegen in /templates. Das zugewiesene Template hat Vorrang vor der gesamten Seiten-Kette.
Kategorie-Archiv
Das Archiv, das die Beiträge einer Kategorie auflistet.
- category-{slug}.html
- category-{id}.html
- category.html
- archive.html
- index.html
Schlagwort-Archiv
Das Archiv, das die Beiträge mit einem bestimmten Schlagwort auflistet.
- tag-{slug}.html
- tag-{id}.html
- tag.html
- archive.html
- index.html
Archiv einer benutzerdefinierten Taxonomie
Das Archiv für einen Begriff (Term) einer benutzerdefinierten Taxonomie.
- taxonomy-{taxonomy}-{term}.html
- taxonomy-{taxonomy}.html
- taxonomy.html
- archive.html
- index.html
Autoren-Archiv
Das Archiv mit den Beiträgen eines Autors.
- author-{nicename}.html
- author-{id}.html
- author.html
- archive.html
- index.html
Datums-Archiv
Ein Jahres-, Monats- oder Tages-Archiv.
- date.html
- archive.html
- index.html
Post-Type-Archiv
Die Archiv-Übersicht eines Custom Post Types, bei dem has_archive gesetzt ist.
- archive-{post-type}.html
- archive.html
- index.html
Suchergebnisse
Die Ergebnisseite einer Website-Suche.
- search.html
- index.html
404 (nicht gefunden)
Wird angezeigt, wenn kein Inhalt zur URL passt.
- 404.html
- index.html
Anhang-Seite
Die Seite für einen einzelnen Medien-Anhang.
- attachment.html
- single.html
- singular.html
- index.html
Viele Websites deaktivieren Anhang-Seiten komplett (sie gelten als Thin Content). Wenn du sie behältst, gilt diese Kette.
Seite der Datenschutzerklärung
Die Seite, die in den Einstellungen als Datenschutzerklärung der Website festgelegt ist.
- page-privacy-policy.html
- privacy-policy.html
- page.html
- singular.html
- index.html
Wie sich das von der klassischen (PHP-)Hierarchie unterscheidet
- Templates sind .html-Dateien in /templates, keine .php-Dateien im Theme-Stammverzeichnis. Es gibt keine single.php – es ist single.html.
- Wiederverwendbare Bereiche (Header, Footer) sind Template-Teile (Template Parts) in /parts, die über den wp:template-part-Block eingebunden werden – nicht über get_header()- / get_footer()-PHP-Aufrufe.
- Es gibt keine get_template_part()-Kette und kein get_header()/get_footer(). Die Zusammensetzung erfolgt über den Template-Part-Block innerhalb der .html-Dateien.
- index.html ist ERFORDERLICH. Ein block theme ohne templates/index.html ist kein gültiges block theme – sie ist der obligatorische letzte Fallback für jede der oben genannten Routen.
- Ein Theme wird zum block theme durch das VORHANDENSEIN von templates/index.html plus einer theme.json – nicht durch irgendein Header-Flag.
- Du kannst jedes dieser Templates im Website-Editor (Design → Editor) bearbeiten und die Änderungen in der Datenbank speichern – diese ÜBERSCHREIBEN dann die Dateien des Themes, bis du die Anpassung zurücksetzt. Das überrascht alle, die dem Problem „Warum bewirkt meine Template-Änderung nichts?“ auf den Grund gehen.