WordPress Post Thumbnail und die Abwärtskompatibilität

Die Zeiten ändern sich.

Dieser Beitrag scheint älter als 14 Jahre zu sein – eine lange Zeit im Internet. Der Inhalt ist vielleicht veraltet.

WP Adventskalender 18
WordPress bringt mit Version 2.9 die wohl am meisten diskutierte Funktion des Post Thumbnails in das System. Für windige Theme-Autoren war das auch im Vorfeld kein Thema und trotzdem wird sie geliebt. Wichtig bei dieser Funktion, sie geht nur, wenn man sie explizit im Theme aktiviert. Dies macht der folgenden kleine Schnipsel in der functions.php des Themes: add_theme_support('post-thumbnails');.

Aber auch bei dieser Funktion sollte man auf das Vorhandensein der Funktion prüfen und eine Alternative anbieten. Nur so kann man dem Nutzer die Freiheit der WordPress Version überlassen. Die Funktionen von Erweiterungen, Plugins und Themes gehröen einer Prüfung unterzogen; so ist die Funktion des Themes abgesichert, auch wenn eine Funktion nicht zur Verfügung steht. Ähnlich sehe ich es mit dieser Funktion für die Thumbnails zum Beitrag, auch wenn sie Funktionen aus dem Core nutzen.

Zwei Anregungen für Alternativen möchte ich im folgenden kurz aufzeigen und ich verweise auf den ausführlichen Artikel zum Thema Bilder in Themes mit Benutzerdef. Feldern oder der Mediathek von WordPress nutzen.

Nach Hinzufügen der folgenden Syntax in der functions.php des Themes steht die MetaBox im Bereich Schreiben eines Beitrags bzw. Seite bereit und kann einfach via Aufruf der Mediathek aus dieser MetaBox genutzt werden.


if ( function_exists('add_theme_support') )
	add_theme_support('post-thumbnails');

Alternativ kann man zwischen Beiträgen und Seiten trennen:


add_theme_support( 'post-thumbnails', array( 'post' ) ); //Beiträge
add_theme_support( 'post-thumbnails', array( 'page' ) ); //Seiten

Man kann im übrigen auch Größen definieren, zum einen direkt für Thumbnails …


set_post_thumbnail_size( 150, 150, true ); // Breite, Höhe, true für kein crop mode; beschneiden

… und ebenso andere Größen, in dem man zusätzlich einen Namen vergibt. Im obigen Code ist der Standard-Name post-thumbnail übergeben.


add_image_size('my-single-picture', 150, 150, false);

Die Ausgabe des Bildes wird dann im Theme an der Stelle, wo es erscheinen soll, einfach mit Hilfe des Template Tag erzeugt: the_post_thumbnail().


if ( current_theme_supports( 'post-thumbnails' ) )
	the_post_thumbnail( array(300,200) );

Alternativ kann man dann auch wieder die eigenen Typen abfragen:


the_post_thumbnail( 'my-single-picture' );

Wichtig, arbeitet man mit zusätzlichem Markup, dann gehört die Abfrage dazu, ob es denn ein Thumbnail zum Beitrag gibt. Ansonsten wird unnötig Markup ausgegeben, welches keinen Inhalt hat.


<?php
if ( has_post_thumbnail() ) { ?>
	<span class="my_image">
		<?php the_post_thumbnail(array(600, 400)); ?>
	</span>
} ?>

Um nun aber eine Alternative für Installationen kleiner WP 2.9 zu haben, kann man verschiedene Ansätze gehen. Die zwei folgenden Beispiele sind daher als Ideengeber zu verstehen: entweder mit Hilfe der benutzerdefinierten Felder, Feldname ist post-image


if ( function_exists('has_post_thumbnail') && has_post_thumbnail() ) {
	the_post_thumbnail(); // @parameter: array(height, width)
} else {
	$myimage = get_post_meta($post->ID, 'post-image', true); // via custom field
	if ($myimage) {
		echo '<img class="wp-post-image" src="'.$postimage.'" alt="Post Iage" />';
	}
}

… oder im nachfolgenden Beispiel das erste Bild aus der Mediathek. Mehr dazu gibt es in einem separaten Beitrag.


if ( function_exists('has_post_thumbnail') && has_post_thumbnail() ) {
	the_post_thumbnail(); // @paramter: array(height, width)
} else {
	// via mediathek
	$attachments = get_children( array(
									'post_parent'    => get_the_ID(),
									'post_type'      => 'attachment',
									'numberposts'    => 1, // show all -1
									'post_status'    => 'inherit',
									'post_mime_type' => 'image',
									'order'          => 'ASC',
									'orderby'        => 'menu_order ASC'
									) );
	foreach ( $attachments as $attachment_id => $attachment ) {
		echo wp_get_attachment_image( $attachment_id );
	}
}

Prüfen ob das Theme die Funktion unterstützt ist ebenso möglich:


if ( current_theme_supports( 'post-thumbnails' ) ) {
	...

Zusätzlich kann man prüfen, ob das Theme die Funktion unterstützt und explizit für Beiträge (post) oder Seiten (page) nutzen. Sehr interessant, wenn man zusätzliche Funktionen in den Schreiben-Bereich des Backend bringen möchte, welcher abhängig von diesem Feature innerhalb des Theme ist.:


if ( current_theme_supports( 'post-thumbnails', array( 'page' ) ) ) {
	add_meta_box( ...

In diesem Zusammenhang kann man auch extern Dateien mit neuen Funktionen einbinden.


require_if_theme_supports( 'post-thumbnails', ABSPATH . WPINC . '/my-post-thumbnail-funktion.php' );

Von Frank Bültge

bueltge.de [by:ltge.de] wird von Frank Bültge geführt, administriert und gestaltet. Alle Inhalte sind persönlich von mir ausgewählt und erstellt, nach bestem Gewissen und Können, was die Möglichkeit von Fehlern nicht ausschließt.