Mehrere single.php Templates nutzen

Sobald man in einem WordPress-Web einen einzelnen Artikel anzeigen lässt, wird für diesen Aufruf von WordPress das single.php Template verwendet. Wenn man die single.php Datei anpasst, wirkt sich das auf das Aussehen aller damit angezeigten Artikel aus. Dieser Effekt ist manchmal nicht erwünscht, denn unter Umständen möchte man beispielsweise Presseartikel anders strukturieren als Event-Einträge. Leider kann man dafür nicht einfach unterschiedliche Templates erzeugen und (wie bei Seiten) einfach dem jeweiligen Artikel zuweisen. Mit ein wenig PHP-Code kann man WordPress aber „überlisten“.

Dafür erstellt man zunächst zwei Kopien der single.php Datei und benennt sie beispielsweise in single-presse.php und single-event.php. In diesen Dateien nimmt man seine gewünschten Änderungen vor. Anschließend nimmt man sich noch einmal die „reguläre“ single.php vor und ersetzt den kompletten Inhalt durch eine Query vergleichbar mit der folgenden:

<?php $post = $wp_query->post;
if ( in_category('5') ) {
  include(TEMPLATEPATH . '/single-presse.php');
} else {
  include(TEMPLATEPATH . '/single-event.php');
}
?>

In diesem Fall entspräche die Kategorie 5 der Kategorie für Pressemeldungen. Die Abfrage stellt fest, ob ein Artikel aus der Kategorie Presse aufgerufen wird. Falls ja, wird das Single-Presse-Template aufgerufen, falls nein, das Single-Event-Template. Wenn weitere Templates benötigt werden müssen sie durch elseif-Abfragen eingebunden werden.

WordPress

9 Responses to “Mehrere single.php Templates nutzen”

  1. Tanja sagt:

    Hi wollte dir noch die Fehler Meldund posten wenn ich deinen Code einbaue !

    The server encountered an internal error or misconfiguration and was unable to complete your request.

    • dkowalski sagt:

      Der von mir gepostete Schnipsel sollte in einer query funktionieren…
      Bitte prüfe mal, ob im darum liegenden Code ev. noch ein Syntaxfehler steckt.
      So sollte es aussehen:

      post;
      if ( in_category('4235') ) {
      include (TEMPLATEPATH . '/sgewinn.php');
      } else {
      include (TEMPLATEPATH . '/single1.php');
      }
      ?>

  2. Tanja sagt:

    Danke für deine schnelle Antwort es geht leider immer noch nicht !

  3. Tanja sagt:

    Hi Mein Name ist Tanja und ich bin am verzweifeln !
    Der PHP Code ist Klasse klappt bei WordPress 2.6 super ! Die Version hab ich Local.
    Online ist die Version 2.8.6 da klappt es überhaupt nicht wär nett wenn du (ihr) mir unter die Arme greifen könntet.Mein Code in der Single.php ist dieser.
    post;

    if ( in_category(‚4235′) ) {
    include (’sgewinn.php‘);
    } else {
    include (’single1.php‘);
    }
    ?>
    Wenn ich auf den eintrag mit der Kategorie 4235 zum Beispiel klicken geht es bei den anderen Kategorien nicht ?

    mfg Tanja

    • admin sagt:

      Hi,

      versuche es mal mit diesem Code:


      if ( in_category('4235') ) {
      include (TEMPLATEPATH . '/sgewinn.php');
      } else {
      include (TEMPLATEPATH . '/single1.php');
      }

  4. […] original post here: Mehrere single.php Templates nutzen « IT Systempartner Tags: single, single.php, […]

  5. Frederik sagt:

    vielen dank für die anleitung, geht ja echt fix.

  6. Frank sagt:

    Hi, der Artikel hat mir vor längerer Zeit schon einmal weiter geholfen. Nun habe ich die Funktion der Kategorie-Templates entdeckt: http://codex.wordpress.org/Category_Templates.
    Zusätzlich bin ich noch über das Plugin gestolpert, in dem man bei der Artikelbearbeitung unterschiedliche Templates auswählen kann, genauso wie bei der Seitenbearbeitung, sofern diese auch eingerichtet wurden: http://www.nathanrice.net/plugins/single-post-template/
    Also eine Programmier- und eine Komfortvariante. Ersteres setzen wir auf http://yes4trade.de ein.

  7. alte Kievotz sagt:

    Hi

    vielen Dank für den Artikel. Ich bin grad dabei, ein neues Theme für mein Blog zu basteln und habe versucht, in der single.php die Kategorie des Beitrags per is_category(‚…‘) abzufragen. Aber über die single.php bekommt man ja nur per in_category(‚…‘) die richtige Angabe…

You can follow any responses to this entry through the RSS 2.0 feed.