Automatische Thumbnails bzw. Voransichtsdateien mit WordPress-Bordmitteln ohne timThumb & Co.

 16. Februar 2012

Nicht erst seit der Sicherheitslücke in TimThumb, hielt man immer Ausschau nach einer etwas eleganteren Lösung der automatischen Thumbnail-Generierung, zudem das TimThumb-Script nicht gerade das resourcenschonenste in Hinblick auf die Belastung des Datenbankservers ist und die Generierung des Thumbnails immer umständlich über den Browser auf den Erstbetrachter des aufgerufenen Artikels abgewälzt wird. WordPress bietet mit get_attachment eine einfach zu bedienende Funktion, die zudem kein benutzerdefiniertes Feld benötigt. Hier das komplette Script:

<?php
$attachments = get_children( array('post_parent' => get_the_ID(), 'order' => 'ASC', 'post_type' => 'attachment', 'numberposts' => '1', 'post_mime_type' => 'image') );
foreach ( $attachments as $attachment_id => $attachment ) {
	echo '<a rel=lightbox href=' . wp_get_attachment_url( $attachment_id, 'full' ) . '>' . wp_get_attachment_image( $attachment_id, 'medium' ) . '</a>';
} ?>

$attachments = get_children
legt fest, was für ein Dateianhang genutzt werden soll. Zuerst wird die Ausgabe mit get_the_ID() auf den aktuelle Beitrag beschränkt, danach folgt die Art und Weise der Listung der Anhänge (aufsteigend oder absteigend = ASC oder DESC). post_type und post_mime_type legen fest, dass der Anhang ein Bild sein muss und numberposts sorgt schließlich dafür, wieviele Thumbnails angezeigt werden sollen. Im Normalfall ist das 1. Danach beginnt schon die Ausgabe via echo.

wp_get_attachment_url()
Gibt die nackte URL des Bildes aus. In diesem Fall in voller Auflösung (full), da es via Lightbox (rel=lightbox)  angezeigt werden soll.

wp_get_attachment_image()
Gibt den Thumbnail in Medium-Größe direkt mit HTML-Tags (img src usw.) aus. Statt «medium» ist auch «Thumbnail» oder «Full» einsetzbar. Zudem ist es auch möglich. die Größe des auszugebenen Fotos zu begrenzen. In den array() packen wir einfach die maximal anzuzeigende Bildbreite und die maximal anzuzeigenden Bildhöhe. In dem Fall für 270 und 365 Pixel sieht das dann so aus:

wp_get_attachment_image( $attachment_id, array(270,365) )

Nachteil ist hier, dass sich WordPress an den Thumbnailgrößen orientiert. Ist das Medium-Thumbnail zu klein für diese Maximalmaße, wird automatisch die nächsthöhere Bildgröße aus den generierten Thumbnails gezogen und nur verkleinert dargestellt. In Zeiten von hohen Bandbreiten zwar nicht mehr so relevant, trotzdem unschön, wenn zur Voransicht bereits die hochauflösenden Daten geladen werden.

Da  get_attachment die von WordPress direkt beim Upload generierten Thumbnails nutzt, sollte man die Thumbgrößen im Backend unter Einstellungen>Mediathek vorab anpassen. Die Miniaturbildwerte sollte auf die kleinste genutzte Größe begrenzt werden. Sollen in einer Listenausgabe beispielsweise die Thumbnails ein Kantenmaß von 180 Pixel haben. Gehört der Wert auch da rein. Ist das Häkchen bei «Beschneide…» gesetzt, beschneidet WordPress beim Upload die Datei auf diesen Festwert und verwendet keine proportional verkleinerte Version.

Die mittlere und maximale Bildgröße kann man selbst bestimmen. Mit 300px Kantenmaß im Mediumbereich fährt man ganz gut. Die maximale Bildgröße habe ich generell auf 640 Pixel Kantenlänge festgesetzt, da sie auch für Vollansichten völlig ausreicht. Auf die Thumbnail-Datei kann man auch direkt mittels wp_get_attachment_thumb_url() (Ausgabe als nackte URL) bzw. wp_get_attachment_thumb_file() (Ausgabe inklusive HTML-Tags img src usw.) zugreifen.

Die Vorteile des Scripts liegen auf der Hand.

  • Der Autor, welcher Artikel erstellt, muss nur sein Foto hochladen. Das Thumbnail wird automatisch generiert und in den Artikel platziert.
  • Durch die Sortierung ASC, wird nur das erste hochgeladene Foto als Thumbnail genutzt. Alle im Nachhinein hochgeladenen Fotos können an beliebiger Stelle von Hand in den Artikel eingepflegt werden, tauchen jedoch nicht als Thumbnail auf.
  • Es wird kein benutzerdefiniertes Feld benötigt.
  • Wird kein Foto hochgeladen, erscheint auch keines in der endgültigen Ansicht auf der Web-Seite. Gut also für Seiten, bei denen auch mal Artikel ohne Fotos erscheinen.

Einen sehr ausführlichen Artikel zu diesen und weiteren get_attachment-Funktionen, wie das Einbinden von Meta-Daten, bietet Frank Bültge auf seiner Seite.