Как отображать подпись избранного изображения только если она существует?

28 авг. 2013 г., 12:01:43
Просмотры: 25.3K
Голосов: 4

Я использую эту функцию в моем 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 с границами. Я хочу, чтобы в этом случае ничего не отображалось.

Как правильно написать код, чтобы это работало? Заранее спасибо.

2
Комментарии

Пожалуйста, (A) не публикуйте ответы в виде комментариев — добавьте ответ на свой собственный вопрос. (B) Пожалуйста, переработайте ваш вопрос. В нём множество опечаток.

kaiser kaiser
28 авг. 2013 г. 12:21:47

Теперь есть плагин, который создаёт функцию для получения подписи или любого другого поля из миниатюры: http://wordpress.org/plugins/thumbnail-field/

User User
25 мая 2014 г. 18:13:42
Все ответы на вопрос 4
3

Я немного "опоздал", но это решение отлично сработало для меня. Оно будет показывать блок 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>';
  }
?>
26 окт. 2013 г. 22:23:51
Комментарии

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

Paul Coppock Paul Coppock
27 окт. 2013 г. 21:47:23

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

Brad Dalton Brad Dalton
4 апр. 2018 г. 18:07:34

Плюсую, чтобы уравновесить @Dev, потому что, ну, дружище, нужно понимать, как работают циклы, чтобы код работал в твоей конкретной ситуации. Плюс, минусующие — это хейтеры, а Мисс Свифт такого не одобряет.

Nathan Nathan
30 июл. 2020 г. 00:17:14
0

Обратите внимание, что начиная с 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;
   }
 }
}
17 авг. 2016 г. 13:48:12
1

Вы можете попробовать это:

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(); 
28 авг. 2013 г. 12:12:33
Комментарии

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

Paul Coppock Paul Coppock
28 авг. 2013 г. 14:21:22
0

Большинство этих ответов кажутся устаревшими. Попробуйте использовать эту функцию:

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>
15 мая 2023 г. 13:24:45