Přeskočit na obsah

Fallback featured image

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().

Daniel Danielčák

Daniel Danielčák

Chorý mozek, pachatel tratí. Ve volném čase se kromě cyklistiky věnuji programování internetových aplikací v jazyce HTML, CSS, PHP, MySQL a Javascript. Pracuji jako designér a modelér porcelánu.