Custom_Fields | Media

Beitragsbild für Archivansichten mit Bild aus benutzerdefiniertem Feld überschreiben

fly agaric 451766 1920

Neben Parametern für Größe und Attribute ist auch der HTML-Output eines Beitragsbildes überschreibbar – vorausgesetzt, man hat kein Theme installiert, das ihn bereits so überschreibt, dass es den entsprechenden Filter außer Kraft setzt (Hinweis: das kann auch nur dann der Fall sein, wenn man ein benutzerdefiniertes Format definiert hat, also ggf. zuerst Einstellungen prüfen). In diesem Fall wird das Beispiel nicht funktionieren.

Im Weiteren geht das Beispiel der Einfachheit halber davon aus, dass Advanced Custom Fields aktiv ist.

Die Anforderung

Der Websiteinhaber wünschte sich für Archivansichten andere Vorschaubilder als jene, die in den Beiträgen selbst als Beitragsbilder verwendet werden.

Es braucht dafür zwei Dinge: den post_thumbnail_html-Filter und die ID des Bildes das in den Archivansichten das Standard-Beitragsbild ersetzen soll.

Berücksichtigt

  • Responsive Images
  • Anwendung optional (wird kein Archivbild festgelegt, wird das Thumbnail-Format des Beitragsbilds verwendet).

Als benutzerdefiniertes Feld in Beiträgen einen Bild-Upload anlegen (hier archive_featured_image benannt) und die Bild-ID zurückgeben lassen.

functions.php

/** * Replace post thumbnail html on archive pages */ function mytheme_replace_post_thumbnail_html( $html, $post_id, $post_thumbnail_id ) { if ( is_singular() ) return $html; if ( 'post' != get_post_type( $post_id ) ) return $html; $size = 'full'; $img = get_field( 'archive_featured_image', $post_id ); $post = get_post( $post_id ); /* Beitragsbild als Ersatzbild */ if ( !$img ) { $img = $post_thumbnail_id ; $size = 'thumbnail'; } /* gar kein Bild? - Abbruch */ if ( empty( $img ) ) return $html; $src = wp_get_attachment_image_src( $img, $size ); $srcset = wp_get_attachment_image_srcset( $img, $size ); $html = sprintf('<img src="%1$s" width="%2$s" height="%3$s" srcset="%4$s" alt="%5$s" />', $src[0], $src[1], $src[2], $srcset, ( !empty( $img->post_excerpt ) ? $img->post_excerpt : $post->post_title ) ); return $html; } add_filter('post_thumbnail_html', 'mytheme_replace_post_thumbnail_html', 14, 5);

weiter schmökern

Schreibe einen Kommentar

Bitte Kommentarfunktion nicht für Supportanfragen nutzen. Dem kann hier nicht entsprochen werden.

Deine E-Mail-Adresse wird nicht veröffentlicht.