web-dev-qa-db-fra.com

Comment puis-je obtenir une description/titre/alt de l'image pour une image de la galerie?

J'affiche une image de galerie mais je souhaite également afficher la légende pour image. Je peux obtenir les informations que nous insérons lorsque nous téléchargeons une image dans WordPress Dashboard telle que "Titre/Légende/ALT/Description". Je veux avoir quelqu'un et afficher.

<?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">                
            <!-- Here I want display the Title/Caption/ALT/Description of image -->
            <h2><?php echo $image_url->"DESCRIPTION/TITLE/ALT"; ?> </h2>
        </div>                                        
    </div>

Lire dans la documentation de get_post_gallery_images Je n'ai pas trouvé de solution à mon problème.
J'ai aussi trouvé cette réponse mais je ne sais pas si cela fonctionne et j'ai des erreurs à mettre en œuvre dans mon code.

Quoi qu'il en soit, comment puis-je résoudre ce problème?

2
Zkk

Vous devez obtenir la metadata de chaque image, ajoutez ceci dans votre fichier functions.php:

function get_post_gallery_images_with_info($postvar = NULL) {
    if(!isset($postvar)){
        global $post;
        $postvar = $post;//if the param wasnt sent
    }


    $post_content = $postvar->post_content;
    preg_match('/\[gallery.*ids=.(.*).\]/', $post_content, $ids);
    $images_id = explode(",", $ids[1]); //we get the list of IDs of the gallery as an Array


    $image_gallery_with_info = array();
    //we get the info for each 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;
}

utilisez-le dans votre logique comme ceci:

<?php    
    $gallery = get_post_gallery_images_with_info($post); //you can use it without params too
    foreach( $gallery as $image_obj ) :    
?>                                

    <div class="item" style="background-image: url('<?php echo $image_obj['src'] ?>'); background-size: cover">
        <div class="caption">                
            <!-- Here I want display the Title/Caption/ALT/Description of image -->
            <h2><?php echo $image_obj['title']." ". $image_obj['caption']." ".$image_obj['description']; ?> </h2>
        </div>                                        
    </div>
<?php    
endforeach;
?>

il sortira comme ceci:

 enter image description here 

chaque image renvoyée par la fonction est un tableau comme celui-ci:

Array
        (
            [alt] => Alt Coffe
            [caption] => Caption coffe
            [description] => Description coffe
            [href] => http://yoursite/2017/02/14/hello-world/coffee/
            [src] => http://yoursite/wp-content/uploads/sites/4/2017/02/coffee.jpg
            [title] => coffee
        )

avis href et src sont différents, l’un est le lien permanent et l’autre le URL direct.

2
David Lee

La légende d'une image est en fait une méta_data attachée à l'image et le get_post_gallery_images ne renvoie qu'un url , de sorte que vous ne disposerez pas d'autres informations dans le tableau.

Vous pouvez essayer quelque chose comme:

<?php    
    $gallery = get_post_gallery_images( $post );
    foreach( $gallery as $image_url ) :  

    //get the id of the image post.
    $image_id = url_to_postid( $image_url ) 
    //get the image "post" information
    $image = get_post($image_id);
    //get the image title
    $image_title = $image->post_title;
    //get the image caption
    $image_caption = $image->post_excerpt;

?>                                

    <div class="item" style="background-image: url('<?php echo $image_url ?>'); background-size: cover">
        <div class="caption">                
            <!-- Here I want display the Title/Caption/ALT/Description of image -->
            <h2><?php echo $image_caption; ?> </h2>
        </div>                                        
    </div>
1
Kyon147