WordPress & Webwork

Spezielles WordPress-Template für ein bestimmtes Kategorie- oder Schlagwort-Archiv

Mit eigenen Templates das Archiv einer bestimmten Kategorie oder eines bestimmten Schlagwortes anpassen.

Mit der vermehrten Popularität von Formatvorlagen für Artikel, die sicherlich auch durch das neue Standard-Theme Twenty Thirteen kommt, erreicht uns in letzter ein paar Mal die Anfrage, ob es so etwas in der Art denn auch für ganze Kategorien gibt.

Konkret wird gefragt, ob man Archivseiten, die Artikel einer bestimmten Kategorie oder für ein bestimmtes Schlagwort darstellen auch abweichend vom Standard-Archiv gestalten kann.

Und die Antwortet lautet: ja. Durch die Template-Hierarchie von WordPress ist dies möglich.

Kategorie-Archive werden nach der folgenden Systematik dargestellt:

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

Konkret bedeutet das folgendes: Wenn es eine Kategorie mit dem Namen Plugins und der ID 27 gibt, so wird bei der Darstellung ihres Archives zunächst nach einer Datei mit dem Namen category-plugins.php geschaut, dann nach der Datei category-27.php. Erst dann wird die Darstellung durch die Datei category.php übernommen. Ist auch diese nicht vorhanden, wird auf die Datei archive.php zugegriffen. Fehlt auch diese Datei ist die index.php für die Ausgabe der Inhalte verantwortlich.

Möchte man also eine individuelle Gestaltung für eine bestimmte Kategorie, so muss man entweder eine category-plugins.php oder eine category-27.php erstellen.

Diese füllt man dann mit dem entsprechenden Inhalten. Die einfachste Herangehensweise ist es oft sich als Grundlage eine bestehende Archivseite, zum Beispiel die category.php, zu kopieren und dann eigene Anpassungen vorzunehmen.

Durch eine Erweiterung der functions.php kann man zudem erreichen, dass die neue Datei auch für Sub-Kategorien der angesprochenen Kategorie gelten:

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

Quelle: WerdsWords

Standardmäßig ist die Datei category-plugins.php nämlich nur "zuständig" für das Archiv der Kategorie, die explizit angesprochen wird, aber nicht für das Archiv von Unterkategorien.

Ganz ähnlich sieht die Sache auch für die Darstellung von Schlagwort-Archiven aus:

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

Der hierarchische Aufbau und die Zuständigkeiten entsprechen der bei Kategorien.

5 Reaktion(en)

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

  2. Christian Narkus

    Gibt es für WP inzwischen eine einfachere Lösung? Da bin ich wohl durch Contao sehr verwöhnt. Dort kann ich mittels Layoutverwaltung im Backend – ganz ohne harten und wohl auch nicht updatefähigen Eingriff – Layouts für bestimmte Unterseiten, dutzendfach wenn ich will, definieren und zuweisen. So wünsche ich mir das bei WP auch.

  3. mike

    Eine Frage dazu:
    ich sehe keine Möglichkeit, die Artikel dazu entsprechend zu stylen. Bin davon ausgegangen, dass das vom kategorie-template "übernommen" wird.
    Was tun?

  4. Tobias

    @mike: Habe da ein ähnliches Problem, denn eigentlich suche ich nur eine einfache Möglichkeit, damit z.B. alle Artikel innerhalb der Kategorie A ein anderes Layout erhalten, als die "normalen" Blogbeiträge. Der Aufbau der Artikelseite wird ja regulär über die loop-single.php (früher single.php) ausgegeben, aber alle Basteleien meinerseits waren bisher vergebens und vielleicht kann hier jemand helfen… Danke!

Die Kommentare in diesem Beitrag sind geschlossen.