Al mostrar la imagen destacada, ¿es necesario has_post_thumbnail ()?

2

Me cuesta mucho encontrar documentación sobre lo que the_post_thumbnail() devuelve si no hay una imagen destacada.

Si no necesito ningún html adicional alrededor de la imagen destacada, ¿debo seguir usando has_post_thumbnail() ?

Por ejemplo, esto es redundante:

if ( has_post_thumbnail() ) {
    the_post_thumbnail();
}
    
pregunta PBwebD 01.02.2018 - 21:44

1 respuesta

6

Es probable que ese tipo de detalle no esté en la documentación formal, por lo que lo mejor es mirar directamente el código fuente.

Aquí está con las partes irrelevantes eliminadas:

function the_post_thumbnail( $size = 'post-thumbnail', $attr = '' ) {
    echo get_the_post_thumbnail( null, $size, $attr );
}

/**
 * Retrieve the post thumbnail.
 * @return string The post thumbnail image tag.
 */
function get_the_post_thumbnail( $post = null, $size = 'post-thumbnail', $attr = '' ) {
    if ( ! $post ) {
        return '';
    }

    $post_thumbnail_id = get_post_thumbnail_id( $post );

    if ( $post_thumbnail_id ) {
        //...
    } else {
        $html = '';
    }

    /**
     * Filters the post thumbnail HTML.
     * @param string       $html              The post thumbnail HTML.
     */
    return apply_filters( 'post_thumbnail_html', $html, $post->ID, $post_thumbnail_id, $size, $attr );
}

Por lo tanto, puede ver que the_post_thumbnail() simplemente repite lo que sea devuelto por get_the_post_thumbnail() . El docblock para get_the_post_thumbnail() declara que devuelve una cadena y que coincide con el código.

Por lo tanto, si una imagen destacada no está establecida, solo debería devolver una cadena vacía, que luego tendrá eco, lo que no tendrá ningún efecto en el marcado renderizado.

Si otro complemento filtra la salida de post_thumbnail_html , entonces podría devolver algo más, por supuesto, incluso si una miniatura no está establecida.

Por lo tanto, en su caso específico, envolver la llamada en has_post_thumbnail() solo sería una precaución contra los efectos secundarios no deseados, pero no parece probable que tenga problemas si lo deja de lado.

Sin embargo, en la página en la que querías agregar un marcado adicional alrededor de la imagen, sería necesario (props @swisspidy). por ejemplo:

<?php if ( has_post_thumbnail() ) : ?>
    <header class="entry-header">
        <?php the_post_thumbnail(); ?>
        <p>Lorum ipsum blah blah blah</p>
    </header>
<?php endif; ?>
    
respondido por el Ian Dunn 01.02.2018 - 22:03

Lea otras preguntas en las etiquetas