Как отображать подпись избранного изображения только если она существует?
Я использую эту функцию в моем functions.php для отображения подписи к избранным изображениям:
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>';
}
}
И использую это в файле шаблона для отображения подписи:
<?php
if (the_post_thumbnail_caption()) {
the_post_thumbnail_caption();
}
?>
В файле functions у меня подпись отображается в div с классом="front-caption", который я стилизую границами. Если подпись не существует, он все равно отображает пустой div с границами.
Если подписи не существует, я не хочу отображать div с границами. Я хочу, чтобы в этом случае ничего не отображалось.
Как правильно написать код, чтобы это работало? Заранее спасибо.

Я немного "опоздал", но это решение отлично сработало для меня. Оно будет показывать блок div только если подпись не пустая.
<?php
$get_description = get_post(get_post_thumbnail_id())->post_excerpt;
the_post_thumbnail();
if(!empty($get_description)){//Если описание не пустое, показываем div
echo '<div class="featured_caption">' . $get_description . '</div>';
}
?>

Спасибо, Дежо, я на 100% уверен, но думаю, что в итоге пришел именно к этому.

Минусую. Отлично, но не работает в WP_Query для пользовательского цикла в шаблоне страницы.

Обратите внимание, что начиная с WordPress 4.6, эта функция была добавлена в ядро (/wp-includes/post-thumbnail-template.php
).
Использование кода, размещенного здесь ранее, вызовет ошибку:
Фатальная ошибка: Невозможно переопределить функцию the_post_thumbnail_caption()
Чтобы избежать этого, назовите функцию по-другому. Или, если вам нужно поддерживать более ранние версии WordPress в теме, добавьте проверку следующим образом:
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;
}
}
}

Вы можете попробовать это:
function the_post_thumbnail_caption() {
global $post;
// Получаем ID миниатюры текущего поста
$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])) {
// Возвращаем подпись в div с классом front-caption
return '<div class="front-caption">'.$thumbnail_image[0]->post_excerpt.'</div>';
} else {
return;
}
}
затем:
echo the_post_thumbnail_caption();

Это отлично работает, за исключением случаев, когда у миниатюры записи нет подписи. Если подпись отсутствует, всё равно выводится div "front-caption". У меня .front-caption стилизован с границами, и когда подписи нет, отображается миниатюра записи с пустым div "front-caption" и границами. Я пытаюсь сделать так, чтобы этот div скрывался, если у миниатюры записи нет подписи.

Большинство этих ответов кажутся устаревшими. Попробуйте использовать эту функцию:
the_post_thumbnail_caption();
Ссылка: https://developer.wordpress.org/reference/functions/the_post_thumbnail_caption/
Например:
<div class="featured-image-caption"><?php echo the_post_thumbnail_caption(); ?></div>
