Cum să afișezi descrierea imaginii în evidență doar dacă există?
Folosesc această funcție în functions.php pentru a afișa descrierea imaginilor principale:
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>';
}
}
Și folosesc acest cod în fișierul șablon pentru a afișa descrierea:
<?php
if (the_post_thumbnail_caption()) {
the_post_thumbnail_caption();
}
?>
În fișierul functions am descrierea afișată într-un div cu class="front-caption" pe care îl stilizez cu borduri. Dacă descrierea nu există, tot afișează div-ul gol cu bordură.
Dacă nu există nicio descriere, nu vreau să afișeze div-ul cu bordură. Vreau să nu afișeze nimic.
Cum pot scrie codul corect pentru a funcționa? Mulțumesc anticipat.

Sunt "puțin întârziat" dar această soluție a funcționat excelent pentru mine. Va afișa div-ul doar dacă descrierea nu este goală.
<?php
$get_description = get_post(get_post_thumbnail_id())->post_excerpt;
the_post_thumbnail();
if(!empty($get_description)){//Dacă descrierea nu este goală, afișează div-ul
echo '<div class="featured_caption">' . $get_description . '</div>';
}
?>

Mulțumesc Dejo, sunt 100% sigur, dar cred că asta am obținut în final.

Vot negativ. Foarte bun dar nu funcționează în WP_Query pentru o buclă personalizată într-un șablon de pagină.

Vă rugăm să rețineți că începând cu WordPress 4.6, funcția a fost adăugată în nucleu (/wp-includes/post-thumbnail-template.php
).
Utilizarea codului postat anterior aici va genera eroarea:
Eroare fatală: Cannot redeclare the_post_thumbnail_caption()
Pentru a evita acest lucru, vă rugăm să denumiți funcția altfel sau, dacă dezvoltați pentru versiuni mai vechi de WordPress într-o temă, adăugați o verificare astfel:
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;
}
}
}

Puteți încerca acest lucru:
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;
}
}
și apoi:
echo the_post_thumbnail_caption();

Acest lucru funcționează excelent, cu excepția cazului în care am o imagine în miniatură pentru postare fără legendă. Dacă nu există o legendă, tot se afișează div-ul "front-caption". Am stilizat .front-caption cu borduri și când nu există o legendă, afișează imaginea în miniatură pentru postare cu div-ul gol "front-caption" și borduri. Încerc să fac ca div-ul să fie ascuns, cu excepția cazului în care există o legendă pentru imaginea în miniatură a postării.

Majoritatea acestor răspunsuri par destul de învechite. Încercați această funcție:
the_post_thumbnail_caption();
Referință: https://developer.wordpress.org/reference/functions/the_post_thumbnail_caption/
De exemplu:
<div class="featured-image-caption"><?php echo the_post_thumbnail_caption(); ?></div>
