¿Cómo puedo obtener la descripción/título/alt de una imagen de galería?
Estoy mostrando una imagen de galería pero también quiero mostrar su leyenda. Puedo obtener la información que insertamos cuando subimos una imagen en el Panel de WordPress como "Título/Leyenda/ALT/Descripción". Quiero obtener cualquiera de estos y mostrarla.
<?php
$gallery = get_post_gallery_images( $post );
foreach( $gallery as $image_url ) :
?>
<div class="item" style="background-image: url('<?php echo $image_url ?>'); background-size: cover">
<div class="caption">
<!-- Aquí quiero mostrar el Título/Leyenda/ALT/Descripción de la imagen -->
<h2><?php echo $image_url->"DESCRIPTION/TITLE/ALT"; ?> </h2>
</div>
</div>
Leyendo la documentación de get_post_gallery_images no encontré una solución para mi problema.
También encontré esta respuesta pero no estoy seguro si funciona y tengo errores al implementarla en mi código.
En cualquier caso, ¿cómo puedo resolver esto?

Necesitas obtener los metadatos
de cada imagen, añade esto a tu archivo functions.php
:
function get_post_gallery_images_with_info($postvar = NULL) {
if(!isset($postvar)){
global $post;
$postvar = $post;//si el parámetro no fue enviado
}
$post_content = $postvar->post_content;
preg_match('/\[gallery.*ids=.(.*).\]/', $post_content, $ids);
$images_id = explode(",", $ids[1]); //obtenemos la lista de IDs de la galería como un Array
$image_gallery_with_info = array();
//obtenemos la información para cada ID
foreach ($images_id as $image_id) {
$attachment = get_post($image_id);
array_push($image_gallery_with_info, array(
'alt' => get_post_meta($attachment->ID, '_wp_attachment_image_alt', true),
'caption' => $attachment->post_excerpt,
'description' => $attachment->post_content,
'href' => get_permalink($attachment->ID),
'src' => $attachment->guid,
'title' => $attachment->post_title
)
);
}
return $image_gallery_with_info;
}
úsalo en tu lógica así:
<?php
$gallery = get_post_gallery_images_with_info($post); //también puedes usarlo sin parámetros
foreach( $gallery as $image_obj ) :
?>
<div class="item" style="background-image: url('<?php echo $image_obj['src'] ?>'); background-size: cover">
<div class="caption">
<!-- Aquí quiero mostrar el Título/Leyenda/ALT/Descripción de la imagen -->
<h2><?php echo $image_obj['title']." ". $image_obj['caption']." ".$image_obj['description']; ?> </h2>
</div>
</div>
<?php
endforeach;
?>
el resultado será algo así:
cada imagen devuelta por la función es un array como este:
Array
(
[alt] => Alt Café
[caption] => Leyenda café
[description] => Descripción café
[href] => http://tusitio/2017/02/14/hola-mundo/cafe/
[src] => http://tusitio/wp-content/uploads/sites/4/2017/02/cafe.jpg
[title] => café
)
observa que href
y src
son diferentes, uno es el enlace permanente y el otro la URL
directa.

El pie de foto de una imagen es en realidad meta_datos adjuntos a la imagen y la función get_post_gallery_images solo devuelve una URL, por lo que en el array no tendrás ninguna otra información.
Podrías intentar algo como:
<?php
$gallery = get_post_gallery_images( $post );
foreach( $gallery as $image_url ) :
//obtener el ID del post de la imagen
$image_id = url_to_postid( $image_url )
//obtener la información del "post" de la imagen
$image = get_post($image_id);
//obtener el título de la imagen
$image_title = $image->post_title;
//obtener el pie de foto de la imagen
$image_caption = $image->post_excerpt;
?>
<div class="item" style="background-image: url('<?php echo $image_url ?>'); background-size: cover">
<div class="caption">
<!-- Aquí quiero mostrar el Título/Pie de foto/ALT/Descripción de la imagen -->
<h2><?php echo $image_caption; ?> </h2>
</div>
</div>
