¿Cómo puedo obtener la descripción/título/alt de una imagen de galería?

16 feb 2017, 16:15:38
Vistas: 23.4K
Votos: 4

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?

0
Todas las respuestas a la pregunta 2
3

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í:

ver descripción de la imagen aquí

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.

16 feb 2017 18:12:14
Comentarios

¡Increíble! Muy simple y limpio. Muchas gracias por tu ayuda.

Zkk Zkk
16 feb 2017 19:45:26

Soy nuevo en WordPress y PHP - ¿dónde insertaste esta parte del código?

Yebach Yebach
15 mar 2018 10:14:52

@Yebach esto funciona con un objeto post que tiene una galería de imágenes, la función va en el archivo functions.php y la lógica en cualquier plantilla singular donde puedas proporcionar un objeto post a la función

David Lee David Lee
20 mar 2018 04:48:36
0

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>
16 feb 2017 17:50:38