Facebook
Twitter
Google+
Kommentare
11

WordPress: Layout pro Artikel definieren

Ich bin ja immer mal wieder dabei ein wenig an unserem Blog rumzuschrauben. Hier und da mal ein kleines neues Feature kann ja nicht schaden. Jetzt wollte ich versuche für einen einzelnen Beitrag das Layout ein wenig zu verändern, um dann zu merken, dass dies gar nicht geht. In WordPress habe ich leider nur die Möglichkeit die Startseite, die Kategorieansicht (für jede Kategorie individuell), das Archiv und die eigentlich Beitragsseite anzupassen. Ein Interview also in einem anderem Layout anzuzeigen wie zum Beispiel die Projektwerkstatt ist nicht möglich. Zumindest sieht WordPress dies nicht vor.

Was also machen? Vor WordPress kapitulieren? Niemals! Ich lass mich doch von so einem Blogsystem nicht in die Knie zwingen. Mir ist natürlich eine gar nicht mal saubere Methode eingefallen, wie man dieses Feature einbauen kann, ohne den WordPress Code zu ändern. Wenn jemand von euch eine bessere kennt, dann her damit. Für den Moment reicht mir meine, aber wer weiss, vielleicht hat ja schon mal jemand mehr Gehirnschmalz als meine 5 Minuten hineingesteckt.

Fangen wir also an. Wir haben keine Möglichkeit zu einem Blogeintrag ein Layout zu definieren, was wir aber sehr wohl haben sind benutzerdefinierte Felder. Diese verwenden wir jetzt einfach dazu das gewünschte Seiten-Template anzusprechen. Einfach ein Feld mit dem Namen „sites“ definieren und zum Beispiel „interview“ als Wert eintragen. Natürlich haben wir jetzt ja noch gar nicht gewonnen. Ein wenig Programmieren müssen wir noch. Als kurze Anmerkung, die Datei, die für die einzelnen Artikel verantwortlich ist nennt sich index.php und ist im themes Verzeichnis zu finden. Und genau diese öffnen wir jetzt. Am besten vorher wegspeichern, falls wir hier Müll bauen. Ich will ja nicht verantworlich sein, wenn auf einmal euer Blog nicht mehr funktioniert. Was ich gemacht habe ist ganz einfach. Ich habe den Code der da vorher stand einfach in eine Datei sites/index.php gepackt und die index.php komplett überschrieben. Und zwar mit diesem Code:

<?php the_post( ); ?>
<?php $site = get_post_meta($post->ID, 'site', true);  ?>
<?php
  if ( $site != '' ) {
    include 'sites/'.$site.'.php';
  } else {
    include 'sites/index.php';
  }
?>

Das war’s auch schon. Wir haben uns einen kleinen DIspatcher gebaut. Wer auf sichergehen will, dass niemand ihn angreift, der sollte nicht direkt $site inkludieren. Das habe ich mir hier aber mal gespart, denn hier im Blog dürfen ja nur die Besten der Besten ihre Artikel veröffentlichen und die sind ja per Definition ja schon toll und würden sowas nie machen. Jetzt fehlt nur noch die Datei interview.php im sites Verzeichnis und schon sind wir da wo wir hin wollten: im Template-Paradies.

Über den Autor

Nils Langner

Nils Langner ist der Gründer von "the web hates me" und auch der Hauptautor. Im wahren Leben leitet er das Qualitätsmanagementteam im Gruner+Jahr-Digitalbereich und ist somit für Seiten wie stern.de, eltern.de und gala.de aus Qualitätssicht verantwortlich. Nils schreibt seit den Anfängen von phphatesme, welches er ebenfalls gegründet hat, nicht nur für diverse Blogs, sondern auch für Fachmagazine, wie das PHP Magazin, die t3n, die c't oder die iX. Nebenbei ist er noch ein gern gesehener Sprecher auf Konferenzen. Herr Langner schreibt die Texte über sich gerne in der dritten Form.
Kommentare

11 Comments

  1. Thamtic (ein Framework zum einfachen erstellen von Themes) hat ein tolles Feature: Komplett dynamische Klassen. Das Body Element hat eine ganze Reihe von Klassen, unter anderem ein Artikel-Token, aktueller Browser & Betriebssystem des nutzers und eine menge mehr. Darüber gelöst, könnte man einem einzelnen Artikel ein eigenes Layout verpassen, und müsste nur die CSS-Datei anpacken.

    Da ich mein Blog gerade einem Relaunch unterziehe, und für den eigenen Theme Thematic verwende, kann ich das nur wärmstens empfehlen (allein die gefühlt 200 Hooks sind super).

    Reply
  2. Eine kleine Anmerkung vom WordPress-Kenner: Die index.php ist nicht die Seite für einen einzelnen Artikel, sondern für die normale Artikel-Übersicht (die Startseite). Für einzelne Artikel ist die single.php da. Wenn diese nicht vorhanden ist wird die index.php herangezogen und eben nur ein einziger Artikel angezeigt.

    Reply
  3. vielleicht hilfen diese links:

    http://codex.wordpress.org/Category_Templates (template pro kategorie)
    http://codex.wordpress.org/CSS#WordPress_Generated_Classes (diese css namen werden automatisch generiert)

    nach allem was ich mir bisher an „theme-frameworks“ angeschaut habe: es bringt nichts- wordpress templates sind eben so einfach wie simpel wie sie sind und da sie nicht zentral aufgehangen werden („es muss ja auch nicht immer MVC sein“) würde ich mich am bestehenden orientieren, da es auch ständig erweitert wird. es geht ja eh nur um die eine oder andere anpassung.

    Reply
  4. @Malte: Sehe ich zum Beispiel bei Thematic vollkommen anders. Die Child Themes kommen da in der Regel komplett ohne Anpassungen der PHP-Dateien aus. Für meinen Relaunch musste ich bisher nur einmal an den Post-Title-Filter. Ansonsten komplett über das Stylesheet gelöst.

    Reply
  5. Im übrigen kann man auch Templates zu Post nutzen, Pluginlösung oder eine Klasse seit 2.7 pro Post ausgeben lassen, so dass man direkt via CSS anpassen kann. Die Lösungen können sehr unterschiedlich sein und man sollte im Vorfeld die Anforderungen gut sondieren.

    Reply
  6. Positiv abgerenzt würde ich als mindestanforderung eine klares Command Pattern fordern, sowie eine View und OutputBuffering. Zumindest was die WordPress Theme angehen würde.

    Reply

Leave a Comment.

Link erfolgreich vorgeschlagen.

Vielen Dank, dass du einen Link vorgeschlagen hast. Wir werden ihn sobald wie möglich prüfen. Schließen