¿Cómo mostrar el pie de foto de la imagen destacada solo si existe?
Estoy usando esta función en mi functions.php para mostrar el pie de foto de las imágenes destacadas:
function the_post_thumbnail_caption() {
global $post;
$thumbnail_id = get_post_thumbnail_id($post->ID);
$thumbnail_image = get_posts(array('p' => $thumbnail_id, 'post_type' => 'attachment'));
if ($thumbnail_image && isset($thumbnail_image[0])) {
echo '<div class="front-caption">'.$thumbnail_image[0]->post_excerpt.'</div>';
}
}
Y usando esto en el archivo de plantilla para mostrar el pie de foto:
<?php
if (the_post_thumbnail_caption()) {
the_post_thumbnail_caption();
}
?>
En el archivo functions tengo el pie de foto mostrándose en un div class="front-caption" que estoy estilizando con bordes. Si el pie de foto no existe, aún muestra el div vacío con bordes.
Si no existe un pie de foto, no quiero mostrar el div con bordes. Solo quiero que no muestre nada.
¿Cómo puedo codificar esto correctamente para que funcione? Gracias de antemano.

Llegué "un poco tarde" pero esta solución funcionó muy bien para mí. Mostrará el div solo si el caption no está vacío.
<?php
$get_description = get_post(get_post_thumbnail_id())->post_excerpt;
the_post_thumbnail();
if(!empty($get_description)){//Si la descripción no está vacía muestra el div
echo '<div class="featured_caption">' . $get_description . '</div>';
}
?>

Gracias Dejo, estoy 100% seguro pero creo que eso es con lo que terminé.

Voto negativo. Genial pero no funciona en WP_Query para un loop personalizado en una plantilla de página.

Ten en cuenta que a partir de WordPress 4.6, la función se ha añadido al núcleo (/wp-includes/post-thumbnail-template.php
).
Usar el código publicado anteriormente aquí causará el error:
Error fatal: No se puede redeclarar the_post_thumbnail_caption()
Para evitar esto, por favor nombra la función de otra manera, o si estás adaptando el tema para versiones anteriores de WordPress, añade una comprobación como esta:
if ( ! function_exists( 'the_post_thumbnail_caption' ) ) {
function the_post_thumbnail_caption() {
global $post;
$thumbnail_id = get_post_thumbnail_id($post->ID);
$thumbnail_image = get_posts(array('p' => $thumbnail_id, 'post_type' => 'attachment'));
if ($thumbnail_image && isset($thumbnail_image[0])) {
return '<div class="front-caption">'.$thumbnail_image[0]->post_excerpt.'</div>';
} else {
return;
}
}
}

Podrías probar esto:
function the_post_thumbnail_caption() {
global $post;
$thumbnail_id = get_post_thumbnail_id($post->ID);
$thumbnail_image = get_posts(array('p' => $thumbnail_id, 'post_type' => 'attachment'));
if ($thumbnail_image && isset($thumbnail_image[0])) {
return '<div class="front-caption">'.$thumbnail_image[0]->post_excerpt.'</div>';
} else {
return;
}
}
y luego:
echo the_post_thumbnail_caption();

Funciona muy bien excepto cuando tengo una miniatura de publicación sin leyenda. Si no hay leyenda, aún imprime el div "front-caption". Tengo el .front-caption con estilos de bordes y cuando no hay leyenda muestra la miniatura de la publicación con el div vacío "front-caption" y los bordes. Estoy tratando de que el div esté oculto a menos que haya una leyenda para la miniatura de la publicación.

La mayoría de estas respuestas parecen bastante desactualizadas. Por favor, prueba esta función:
the_post_thumbnail_caption();
Ref: https://developer.wordpress.org/reference/functions/the_post_thumbnail_caption/
Por ejemplo:
<div class="featured-image-caption"><?php echo the_post_thumbnail_caption(); ?></div>
