WordPress & Webwork

WordPress-Unterkategorien nutzen das gleiche Template wie ihre Eltern

Wie kann man Kind-Kategorien mit dem gleichen Template darstellen wie ihre Eltern?

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' );

3 Reaktion(en)

  1. Pingback: WordPress-Newsletter Nr. 162 | perun.net

    1. Thordis

      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.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.