WordPress-Unterkategorien nutzen das gleiche Template wie ihre Eltern

WordPress: Template-Hierarchie von Chip Bennet
Template-Hierarchie von Chip Bennet

Die Template-Hierarchie von WordPress ist wirklich sehr umfangreich. Und selten vermisse ich da mal etwas. Aber es kam natürlich wie es kommen musste und ein Kunde wollte ein spezielles Kategorie-Template, wobei dieses dann auch für die Unterkategorien gelten sollte.

Um die Archiv-Seite einer Kategorie darzustellen benutzt WordPress die folgenden Templates (in absteigender Priorität).

  1. category-{slug}.php
  2. category-{id}.php
  3. category.php
  4. archive.php
  5. index.php

Gibt es also z. B. die Datei category-blumen.php wird das Archiv für die Kategorie Blumen mit diesem Template dargestellt, auch wenn es eine category.php gibt. Die ist dann zuständig für alle anderen Archive, also z. B. auch für die Unterkategorien von Blume, z. B. Tulpe.

Möchte man nun aber, dass auch sämtliche Unterkategorien der Elternkategorie Blume mit dem Template category-blumen.php dargestellt werden muss man seine functions.php erweitern, z. B. mit der Code-Lösung von Drew Jaynes

function new_subcategory_hierarchy() { 
    $category = get_queried_object();
 
    $parent_id = $category->category_parent;
 
    $templates = array();
     
    if ( $parent_id == 0 ) {
        // Use default values from get_category_template()
        $templates[] = "category-{$category->slug}.php";
        $templates[] = "category-{$category->term_id}.php";
        $templates[] = 'category.php';     
    } else {
        // Create replacement $templates array
        $parent = get_category( $parent_id );
 
        // Current first
        $templates[] = "category-{$category->slug}.php";
        $templates[] = "category-{$category->term_id}.php";
 
        // Parent second
        $templates[] = "category-{$parent->slug}.php";
        $templates[] = "category-{$parent->term_id}.php";
        $templates[] = 'category.php'; 
    }
    return locate_template( $templates );
}
 
add_filter( 'category_template', 'new_subcategory_hierarchy' );

Wir arbeiten seit 20 Jahren mit WordPress und bieten diverse Dienst­leistungen rund um das System an. Kontaktiere uns für weitere Informationen oder für ein Angebot.

Verwandte Beiträge:

3 Kommentare

  1. Kann mir jemand beim eintragen helfen. Mir ist leider nitch ganz klar, welche Template-Angabe wo eingetragen werden muss.

    1. Damit Archivseiten einer bestimmten Kategorie “besonders” dargestellt werden bzw. vom Standard abweichen, muss man dafür ein eigenes Template erstellen, also entweder category-{slug}.php oder category-{id}.php. Damit auch die Unterkategorien dieses Template übernehmen, muss die functions.php mit dem oben genannten Code erweitert werden.

Kommentare sind geschlossen.