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

fly agaric 451766 1920
Bildquelle: Pixabay, cocoparisienne

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);

Bitte Kommentarfunktion nicht für Supportanfragen nutzen. Dem kann hier nicht entsprochen werden. Die Angabe einer E-Mail-Adresse und eines Namens ist nicht erforderlich. Einen (Spitz)-Namen zu nennen wäre aber doch nett.

Schreibe einen Kommentar

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

Hinweis: Sowohl angegebener Name als auch E-Mail-Adresse (beides ist optional, dafür werden alle Kommentare vor Veröffentlichung geprüft) werden dauerhaft gespeichert. Du kannst jeder Zeit die Löschung Deiner Daten oder / und Kommentare einfordern, direkt über dieses Formular (wird nicht veröffentlicht, und im Anschluss gelöscht), und ich werde das umgehend erledigen. – Mit hinterlassenen Kommentaren hinterlegte IP-Adressen werden nach zwei Monaten automatisch gelöscht

publicly queryable