Come mostrare la didascalia dell'immagine in evidenza solo se esiste?
Sto usando questa funzione nel mio functions.php per mostrare la didascalia delle immagini in evidenza:
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>';
}
}
E sto usando questo nel file del template per mostrare la didascalia:
<?php
if (the_post_thumbnail_caption()) {
the_post_thumbnail_caption();
}
?>
Nel file functions ho la didascalia che viene mostrata in un div con class="front-caption" che sto stilizzando con i bordi. Se la didascalia non esiste, viene comunque mostrato il div vuoto con i bordi.
Se non esiste alcuna didascalia non voglio mostrare il div con i bordi. Voglio solo che non venga mostrato nulla.
Come posso codificare correttamente questo per farlo funzionare? Grazie in anticipo.

Sono "un po' in ritardo" ma questa soluzione ha funzionato benissimo per me. Mostrerà il div solo se la didascalia non è vuota.
<?php
$get_description = get_post(get_post_thumbnail_id())->post_excerpt;
the_post_thumbnail();
if(!empty($get_description)){//Se la descrizione non è vuota mostra il div
echo '<div class="featured_caption">' . $get_description . '</div>';
}
?>

Grazie Dejo, ne sono sicuro al 100% ma penso che sia quello con cui sono finito.

Voto negativo. Ottimo ma non funziona in WP_Query per un loop personalizzato in un template di pagina.

Si prega di notare che a partire da WordPress 4.6, la funzione è stata aggiunta al core (/wp-includes/post-thumbnail-template.php
).
Utilizzare il codice precedentemente pubblicato qui causerà l'errore:
Errore fatale: Non è possibile ridefinire the_post_thumbnail_caption()
Per evitare ciò, si prega di rinominare la funzione con un altro nome, o se si sta sviluppando per versioni precedenti di WordPress in un tema, aggiungere un controllo come il seguente:
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;
}
}
}

Potresti provare questo:
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;
}
}
e poi:
echo the_post_thumbnail_caption();

Funziona perfettamente tranne quando ho una miniatura del post senza didascalia. Se non c'è una didascalia, stampa comunque il div "front-caption". Ho lo stile .front-caption con bordi e quando non c'è una didascalia mostra la miniatura del post con il div vuoto "front-caption" e i bordi. Sto cercando di fare in modo che il div sia nascosto a meno che non ci sia una didascalia per la miniatura del post.

La maggior parte di queste risposte sembra piuttosto datata. Prova questa funzione:
the_post_thumbnail_caption();
Rif: https://developer.wordpress.org/reference/functions/the_post_thumbnail_caption/
Ad esempio:
<div class="featured-image-caption"><?php echo the_post_thumbnail_caption(); ?></div>
