• WordPress: Layout pro Artikel definieren

    von am 23. April 2009

    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.

    Nils Langner

    Auch wenn Ihr es mir nicht glauben werdet, aber ich habe nichts gegen PHP. Ich rege mich einfach nur gerne auf. Ok so schlimm ist es auch nicht. Eigentlich wollte ich schon immer einen Blog haben und da ...

    Zum Profil von Nils Langner

    11 Kommentare »


    • unset
      am 23. April 2009 um 08:57 Uhr

      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).


    • Nils Langner
      am 23. April 2009 um 09:15 Uhr

      @unset: Vielen Dank werde ich mir mal genauer anschauen. Sollte “Thematic” heißen denke ich mal, oder?


    • unset
      am 23. April 2009 um 09:42 Uhr

      Äh, ja. Das war vor meinem ersten Kaffee … ;-)


    • Pascal
      am 23. April 2009 um 13:03 Uhr

      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.


    • Nils Langner
      am 23. April 2009 um 13:15 Uhr

      @Pascal: Da hast du wohl recht. Hie rnoch mal der Link zu der ganzen Hierarchie:
      http://codex.wordpress.org/images/1/18/Template_Hierarchy.png


    • Malte
      am 23. April 2009 um 14:34 Uhr

      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.


    • unset
      am 24. April 2009 um 08:02 Uhr

      @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.


    • Frank
      am 24. April 2009 um 08:54 Uhr

      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.


    • Malte
      am 24. April 2009 um 09:14 Uhr

      @unset: thematik< ist etwas, was ich als wordpress theme bezeichnen würde. nur zum verständnis. link: http://themeshaper.com/thematic/


    • unset
      am 24. April 2009 um 10:16 Uhr

      @Malte: Was würdest du denn dann als Framework bezeichnen?


    • Malte
      am 26. April 2009 um 11:16 Uhr

      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.

    RSS Feed für Kommentare zu diesem Artikel. TrackBack URL

    Hinterlasse einen Kommentar

    Werbung
    PHP Magazin
    Ausgabe 02/2010

    Dieses Mal mit Artikeln zu den Themen OpenSocial und Apache Shindig, Graphentheorie, Smarty3

    t3n
    Ausgabe 19

    Social Media (R)evolution. Weitere Themen sind noSQL, Crowdsourcing ...

    PHP Journal
    Ausgabe 2/2010

    PHP & Windows optimal nutzen, die besten PHP-CMS im Überblick, Google-API mit Zend Framework nutzen.

    Wir wurden schon öfters gefragt, ob man uns nicht irgendwie unterstützen kann. Die Antwort war immer einfach: Klar! Am einfachsten ist es eure nächsten Einkäufe bei Amazon über unsere Link abzuwickeln. Damit würdet ihr uns schon sehr helfen. Über Co-Autoren freuen wir uns aber noch mehr.