Begriffe vorab
- Template: eine Datei, die festlegt, wie ein bestimmter Seitentyp ausgegeben wird.
- Template-Hierarchie: die Suchreihenfolge, nach der WordPress das passende Template wählt.
- Child Theme: ein Theme, das von einem Parent Theme erbt und nur Abweichungen enthält.
Ein klassisches Theme besteht aus PHP-Templates. Mindestens nötig sind style.css mit dem Theme-Header und index.php. Die functions.php ist die Stelle für Theme-Setup, Hooks und Enqueues.
/*
Theme Name: Mein Theme
Version: 1.0.0
Text Domain: mein-theme
*/
Template-Hierarchie
WordPress sucht für jede Anfrage das spezifischste vorhandene Template und fällt schrittweise zurück. Beispiel für den Einzelbeitrag eines Post Types book mit dem Slug dune:
single-book-dune.phpsingle-book.phpsingle.phpsingular.phpindex.php
Weitere typische Templates: page.php, front-page.php (Startseite), home.php (Beitragsübersicht), archive.php, category.php, search.php und 404.php.
The Loop
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
<?php the_excerpt(); ?>
<?php endwhile; endif; ?>
Funktionen mit the_ geben direkt aus, Funktionen mit get_ liefern den Wert zurück.
Template-Bausteine
get_header(),get_footer(),get_sidebar()get_template_part( 'template-parts/card', 'post' )für wiederverwendbare Teilewp_head()undwp_footer()müssen vorhanden sein, damit Plugins und Kern Styles und Skripte ausgeben können.
Skripte und Styles
add_action( 'wp_enqueue_scripts', 'meinpraefix_assets' );
function meinpraefix_assets() {
wp_enqueue_style( 'mein-theme', get_stylesheet_uri(), array(), '1.0.0' );
wp_enqueue_script( 'mein-theme-js', get_template_directory_uri() . '/js/app.js', array(), '1.0.0', array( 'in_footer' => true, 'strategy' => 'defer' ) );
}
Child Themes
Ein Child Theme erbt vom Parent, erkennbar am Header Template: parent-ordner. Seine functions.php wird vor der des Parents geladen. Für Pfade des Child Themes nutzt du get_stylesheet_directory_uri(), für den Parent get_template_directory_uri().
Zusätzliche Abfragen in Templates immer mit
wp_reset_postdata()abschließen, sonst zeigen spätere Funktionen den falschen Beitrag.
Ein Beispiel für die Suche
Ruft jemand eine Kategorieseite „Rezepte“ auf, sucht WordPress nacheinander category-rezepte.php, category-{ID}.php, category.php, archive.php und zuletzt index.php. Existiert nur index.php, wird diese genutzt. So kann man ein Theme schrittweise verfeinern, ohne alles auf einmal anzulegen.
Warum ein Child Theme
Änderungen direkt am Parent Theme gehen bei dessen Update verloren. Ein Child Theme enthält nur eigene Styles und abweichende Templates, der Rest kommt vom Parent. Es ist der übliche Weg, ein fertiges Theme sicher anzupassen.
Gute Gewohnheiten
- Wiederverwendbare Teile mit
get_template_part()auslagern. - Skripte und Styles nur über
wp_enqueue_*einbinden, nie fest im Header. - Nach eigenen Abfragen
wp_reset_postdata()aufrufen.
Zum Selbermachen: die Hierarchie erkunden
- Lege in einem Testtheme nur
index.phpan und rufe verschiedene Seitentypen auf. - Ergänze
single.phpund beobachte, was sich ändert. - Ergänze
category-{slug}.phpfür eine Kategorie und prüfe, welche Datei genutzt wird. - Notiere die Reihenfolge, in der WordPress sucht.
Prüfstatus: Belegt (Stand 1. Oktober 2026): Jahreszahlen, Zahlen, Namen und Quellenangaben dieser Lektion, soweit die Quellenliste sie nennt, wurden gegen Primärquellen geprüft. Nicht einzeln belegt: erklärende Darstellung nach Lehrbuchstand und Quellen, die in der Liste als „allgemeine Referenz“ markiert sind. Codebeispiele sind nur auf Syntax geprüft, nicht in WordPress ausgeführt.
Quellen
- WordPress Theme Handbook – „The WordPress Template Hierarchy“ (developer.wordpress.org/themes/basics/template-hierarchy/) (allgemeine Referenz, nicht Zeile für Zeile geprüft)
- WordPress Developer Resources – Funktionsreferenz zu wp_reset_postdata() (allgemeine Referenz, nicht Zeile für Zeile geprüft)