¿Cómo mostrar el pie de foto de la imagen destacada solo si existe?

28 ago 2013, 12:01:43
Vistas: 25.3K
Votos: 4

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.

2
Comentarios

Por favor (A) No publiques respuestas como comentarios -> Añade una respuesta a tu propia pregunta. (B) Por favor, reformula tu pregunta. Tienes muchos errores tipográficos.

kaiser kaiser
28 ago 2013 12:21:47

Ahora hay un plugin que crea una función para obtener el pie de foto o cualquier otro campo de la miniatura: http://wordpress.org/plugins/thumbnail-field/

User User
25 may 2014 18:13:42
Todas las respuestas a la pregunta 4
3

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>';
  }
?>
26 oct 2013 22:23:51
Comentarios

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

Paul Coppock Paul Coppock
27 oct 2013 21:47:23

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

Brad Dalton Brad Dalton
4 abr 2018 18:07:34

Voto positivo para contrarrestar a @Dev porque, bueno, tienes que saber cómo funcionan los loops para que el código funcione en tu situación específica, colega. Además, los que votan negativo son haters y la Srta. Swift no acepta eso.

Nathan Nathan
30 jul 2020 00:17:14
0

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;
   }
 }
}
17 ago 2016 13:48:12
1

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();
28 ago 2013 12:12:33
Comentarios

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.

Paul Coppock Paul Coppock
28 ago 2013 14:21:22
0

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>
15 may 2023 13:24:45