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.