Ja, ich müsste so langsam mal wieder ein Nicht-Wordpress-Thema bearbeiten. Aber eines meiner letzten Projekte war die neue Website vom Hayungs und da ist eben WP die Waffe der Wahl. Ein wichtiges Feature da ist die Bildergalerie, die (abgesehen vom Lightbox-Effekt) kein Plugin u.Ä. ist, sondern allein mit Wordpress-Kernfeatures gebaut wurde. Jedes Bild ist ein ganz normaler Blogpost, der in einer speziellen Kategorie abgelegt wurde und die eigentliche Galerie ist eigentlich nur eine Template-Datei, die diese Kategorie verarbeitet.
Vorteile dieser Bauform sind, dass das Veröffentlichen und Bloggen eines neuen Bildes ein Schritt ist und die Galerie alle nützlichen Eigenschaften von den normalen Postings erbt – Kommentarfunktion, Newsfeed, Trackbacks und so weiter. Weil ich danach öfter mal gefragt wurde, möchte ich den Bauprozess dieser Galerien hier einmal kurz skizzieren.
Post-Kategorien anlegen
Zuerst werden Kategorien benötigt, in denen nacher die Posts abgelegt werden, die von der Gallery verwertet werden. Es kann sinnvoll sein, diese in eine Ober-Kategorie einzusortieren – das muss aber nicht zwingend sein.
Von diesen Kategorien können so viele erstellt werden, wie man braucht... oder auch nur eine.
Die Template-Datei erstellen
Als zweites brauchen wir eine Template-Datei für die Galerieseiten. Für den Moment kümmern wir uns noch nicht um die Feinheiten der Funktionen; es reicht erst mal, wenn die Datei von Wordpress erkannt wird. Also erstellen wir eine leere gallery.php
im Verzeichnis unseres Themes und beschränken uns für den Moment auf folgenden Inhalt:
<?php
/*
Template Name: Gallery
*/
?>
Keine Sorge, da kommt am Ende noch mehr.
Galerieseiten anlegen
In unserem Beispiel erstellen wir jetzt für jede Galerie eine statische Seite. Dabei sind zwei Dinge zu beachten: Erstens muss das frisch erstellte Template dieser Seite zugewiesen werden …
… und zweitens wird ein benutzerdefiniertes Feld benötigt, das diese Seite mit einer der oben erstellten Post-Kategorien verknüpft. Dort wird einfach die ID der betreffenden Kategorie eingetragen.
Man kann auf ähnliche Weise auch mehrere Kategorien für eine Seite festlegen – man muss das Feld dann nur hinterher im Templatecode entsprechend verarbeiten. Jetzt fehlt nur noch der Code, der die statischen Seiten und die Kategorien zusammenfügt.
Der Template-Code
Das ist jetzt etwas viel Code, aber trotzdem nicht sonderlich kompliziert. Im Wesentlichen handelt es sich hier um eine normale Wordpress-Seite, an deren Ende zusätzlich noch ein paar Posts (bzw. Bilder aus den Posts) einer Kategorie angezeigt werden. Es wird hier je ein zum Post gehörendes Bild aus der Datenbank geholt.
<?php
/*
Template Name: Gallery
*/
?>
<?php get_header(); ?>
<?php the_post(); $temp = $wp_query->post; ?>
<h2 id="post-<?php the_ID(); ?>"><?php the_title(); ?></h2>
<?php the_content(); ?>
<ul id="gallery">
<?php
$cat_id = get_post_meta(get_the_id(), 'gallery_category', true);
query_posts('cat='.$cat_id.'&orderby=date&order=desc&showposts=1000');
while(have_posts()) : the_post();
?>
<li>
<h3><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3>
<p>
<a href="<?php the_permalink() ?>#comments"><?php pp_comment_num(); ?></a>
</p>
<?php
$img_id = $wpdb->get_var("SELECT ID FROM $wpdb->posts where post_parent= $post->ID and post_type = 'attachment'");
$img_url = wp_get_attachment_url($img_id);
$thumb_url = wp_get_attachment_thumb_url($img_id);
?>
<a title="<?php the_title(); ?>" href="<?php echo $img_url; ?>"><img src="<?php echo $thumb_url; ?>" alt="<?php the_title(); ?>" /></a>
</li>
<?php endwhile; $wp_query->post = $temp; ?>
</ul>
<?php get_footer(); ?>
Fertig!
Das war es auch schon, es darf fleißig gepostet werden. Einfach ganz normale Blogposts schreiben, ein Bild einfügen und in der gewünschten Post-Kategorie ablegen.
Die obrigen Schritte sollten für einen Galerie-Rohbau genügen, der natürlich hinterher noch verfeinert werden kann. Man könnte ein Lightbox-Script einbauen, die Datenbankzugriffe optimieren, mehrere Kategorien auf einer Seite zusammenführen, eine Blätter-Funktion für große Galerien einbauen, eine Sidebar mit Kategorieauswahl erstellen … was auch immer man braucht.