WordPress Galerie Formatvorlage – bestimmtes Vorschaubild festlegen

Die Formatvorlage für Galerien in WordPress ist eine tolle Sache. In der Beitragsübersicht wird automatisch ein Bild aus der Galerie angezeigt. Was mich allerdings stört ist die fehlende Möglichkeit, ein eigenes Vorschaubild für die Beitragsübersicht zu wählen. Wie du selber ein Bild festlegen kannst, das in der Übersicht angezeigt wird, werde ich dir hier kurz zeigen.

WordPress Galerie Formatvorlage

Die Galerie Formatvorlage ermöglicht dir, eine Galerie in den Beitrag einzufügen und anders als die Standard-Artikel zu präsentieren. Neben einem Vorschaubild kannst du auf der Übersichtsseite die Anzahl der Bilder anzeigen lassen. WordPress nutzt als Vorschaubild aber, soweit ich das beobachten konnte, immer das erste Bild der Galerie. Nun kann es ja durchaus sein, dass du ein bestimmtes Bild als Vorschau zeigen möchtest, welches nicht an erster Stelle steht.
Praktisch wäre doch beispielsweise, dass ein Bild, welches als Artikelbild festgelegt ist, an Stelle des ersten Bildes der Galerie als Vorschaubild angezeigt wird.

Nur eine kleine Änderung

Ich habe nun ein wenig an der Datei content-gallery.php geändert, um diese Funktionalität zu erreichen. So sah der Code zum Anzeigen des Vorschaubildes der Galerie Formatvorlage vorher aus:

<?php
$images = get_children( array( 'post_parent' => $post->ID, 'post_type' => 'attachment', 'post_mime_type' => 'image', 'orderby' => 'menu_order', 'order' => 'ASC', 'numberposts' => 999 ) );
if ( $images ) :
    $total_images = count( $images );
    $image = array_shift( $images );
    $image_img_tag = wp_get_attachment_image( $image->ID, 'large' );
    ?>
    <figure class="gallery-thumb">
        <a href="<?php the_permalink(); ?>"><?php echo $image_img_tag; ?></a>
    </figure><!-- .gallery-thumb -->
    <p><em><?php printf( _n( 'This gallery contains <a %1$s>%2$s photo</a>.', 'This gallery contains <a %1$s>%2$s photos</a>.', $total_images, 'fanoe' ),'href="' . esc_url( get_permalink() ) . '" title="' . esc_attr( sprintf( __( 'Permalink to %s', 'fanoe' ), the_title_attribute( 'echo=0' ) ) ) . '" rel="bookmark"', number_format_i18n( $total_images )); ?></em></p>
<?php endif; ?>

Nun muss einfach überprüft werden, ob ein Artikelbild ausgewählt ist. Ist dies der Fall, wird es an Stelle des automatisch hinzugefügten Vorschaubildes angezeigt. Dafür müssen wir nur die Zeile 9 ein wenig verändern. Der geänderte Code in Zeile 9 sieht wie folgt aus:

<a href="<?php the_permalink(); ?>"><?php if ( has_post_thumbnail() ) { 
    the_post_thumbnail('large');
}else{ 
    echo $image_img_tag;
} ?>
</a>

Nun wird, falls du ein Artikelbild festgelegt hast, diese angezeigt. Wenn kein Artikelbild ausgewählt ist, sucht sich WordPress eins aus der Galerie.

Vorsicht – unerwünschtes Artikelbild in der Einzelansicht

Ein kleines Problem haben wir jetzt aber doch noch:
Wenn in der single.php festgelegt ist, dass ein Artikelbild angezeigt wird, ist das in diesem Fall ja nicht gewünscht. Es würde dann ja erst das Artikelbild angezeigt, und dann die Galerie. Aber meist soll ja nur die Galerie angezeigt werden, da das Artikelbild in dieser ja noch einmal vorkommt.

Einfache Lösung

WordPress stellt die Klasse post_class(); zur Verfügung. Diese fügt ein paar Klassen zu dem Tag hinzu, in dem sie eingesetzt wird. Hier ein kurzes Beispiel, wie sie eingesetzt werden kann:

<article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>

Dieser Code fügt der Einzelansicht einer Galerie unter anderem die Klasse single-format-gallery hinzu. Nun können wir einfach per CSS das Vorschaubild in der Einzelansicht der Galerie Formatvorlage verstecken:

.single-format-gallery .attachment-post-thumbnail{
    display:none;
}

Fazit

Die Änderung ist recht schnell vorgenommen und fügt eine – für mich – sehr sinnvolle Funktion ein. Wie siehst du das? Genügt dir das automatisch gesuchte Vorschaubild, oder kommt dir ein wenig mehr Flexibilität gerade richtig?

Das könnte auch interessant sein

Schreib einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.