Klassische Themes und Template-Hierarchie

LektionWordPress: Themesca. 3 Min. Lesezeit

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:

  1. single-book-dune.php
  2. single-book.php
  3. single.php
  4. singular.php
  5. index.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 Teile
  • wp_head() und wp_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

  1. Lege in einem Testtheme nur index.php an und rufe verschiedene Seitentypen auf.
  2. Ergänze single.php und beobachte, was sich ändert.
  3. Ergänze category-{slug}.php für eine Kategorie und prüfe, welche Datei genutzt wird.
  4. 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)

Alles zu „WordPress: Themes“