V případě, že WP postu chybí doporučený obrázek, je ve výpisu archivu příspěvků i na jiných relevantních místech nahrazen definovaným.
Snippet funguje všude, kde WordPress generuje thumbnail přes get_the_post_thumbnail() nebo the_post_thumbnail() – tedy archivy, blogový výpis, related posts widgety atd. Stačí změnit $fallback_url na reálnou URL náhradního obrázku.
/**
* Fallback featured image – pokud post nemá featured image,
* použije se statická URL.
*/
define( 'DD_FALLBACK_IMAGE_URL', 'https://example.com/wp-content/uploads/fallback-image.jpg' );
add_filter( 'post_thumbnail_html', 'dd_fallback_thumbnail', 10, 5 );
function dd_fallback_thumbnail( $html, $post_id, $thumbnail_id, $size, $attr ) {
if ( ! empty( $html ) ) {
return $html;
}
$class = isset( $attr['class'] ) ? esc_attr( $attr['class'] ) : 'attachment-' . $size . ' size-' . $size;
$alt = isset( $attr['alt'] ) ? esc_attr( $attr['alt'] ) : esc_attr( get_the_title( $post_id ) );
return '<img src="' . esc_url( DD_FALLBACK_IMAGE_URL ) . '" class="' . $class . '" alt="' . $alt . '" loading="lazy">';
}
add_action( 'wp_head', 'dd_fallback_thumbnail_css' );
function dd_fallback_thumbnail_css() {
?>
<style>
/* Pro šablonu Neve */
.nv-post-cover:not([style]) {
background-image: url('<?php echo esc_url( DD_FALLBACK_IMAGE_URL ); ?>');
background-size: cover;
background-position: center;
}
</style>
<?php
}
Pokud chcete fallback i pro has_post_thumbnail() (aby vracelo true i bez featured image), přidejte ještě tohle:
add_filter( 'has_post_thumbnail', 'dd_fallback_has_thumbnail', 10, 3 );
function dd_fallback_has_thumbnail( $has_thumbnail, $post, $thumbnail_id ) {
return true;
}
To se hodí třeba když šablona podmíněně přidává CSS třídu nebo layout na základě has_post_thumbnail().