Come posso ottenere la descrizione/titolo/alt per un'immagine della galleria?

16 feb 2017, 16:15:38
Visualizzazioni: 23.4K
Voti: 4

Sto visualizzando un'immagine della galleria ma voglio anche mostrare la didascalia dell'immagine. Posso ottenere le informazioni che inseriamo quando carichiamo un'immagine nella Dashboard di WordPress come "Titolo/Didascalia/ALT/Descrizione". Vorrei ottenere e visualizzare uno qualsiasi di questi.

<?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">                
            <!-- Qui voglio visualizzare il Titolo/Didascalia/ALT/Descrizione dell'immagine -->
            <h2><?php echo $image_url->"DESCRIZIONE/TITOLO/ALT"; ?> </h2>
        </div>                                        
    </div>

Leggendo la documentazione di get_post_gallery_images non ho trovato una soluzione per il mio problema.
Ho trovato anche questa risposta ma non so se funziona e ho errori nell'implementarla nel mio codice.

In ogni caso, come posso risolvere questo problema?

0
Tutte le risposte alla domanda 2
3

Devi ottenere i metadata di ogni immagine, aggiungi questo al tuo file functions.php:

function get_post_gallery_images_with_info($postvar = NULL) {
    if(!isset($postvar)){
        global $post;
        $postvar = $post;//se il parametro non è stato inviato
    }


    $post_content = $postvar->post_content;
    preg_match('/\[gallery.*ids=.(.*).\]/', $post_content, $ids);
    $images_id = explode(",", $ids[1]); //otteniamo la lista degli ID della galleria come Array


    $image_gallery_with_info = array();
    //otteniamo le informazioni per ogni 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;
}

usalo nella tua logica in questo modo:

<?php    
    $gallery = get_post_gallery_images_with_info($post); //puoi usarlo anche senza parametri
    foreach( $gallery as $image_obj ) :    
?>                                

    <div class="item" style="background-image: url('<?php echo $image_obj['src'] ?>'); background-size: cover">
        <div class="caption">                
            <!-- Qui voglio visualizzare il Titolo/Didascalia/ALT/Descrizione dell'immagine -->
            <h2><?php echo $image_obj['title']." ". $image_obj['caption']." ".$image_obj['description']; ?> </h2>
        </div>                                        
    </div>
<?php    
endforeach;
?>

produrrà un output come questo:

inserisci descrizione immagine qui

ogni immagine restituita dalla funzione è un array come questo:

Array
        (
            [alt] => Alt Caffè
            [caption] => Didascalia caffè
            [description] => Descrizione caffè
            [href] => http://yoursite/2017/02/14/hello-world/coffee/
            [src] => http://yoursite/wp-content/uploads/sites/4/2017/02/coffee.jpg
            [title] => caffè
        )

nota che href e src sono diversi, uno è il permalink e l'altro il URL diretto.

16 feb 2017 18:12:14
Commenti

Fantastico! Molto semplice e pulito. Grazie mille per il tuo aiuto!

Zkk Zkk
16 feb 2017 19:45:26

Sono nuovo a WordPress e PHP - dove hai inserito questa parte di codice?

Yebach Yebach
15 mar 2018 10:14:52

@Yebach questo funziona con un oggetto post che ha una galleria di immagini, la funzione va nel functions.php e la logica in qualsiasi template singolo dove puoi fornire un oggetto post alla funzione

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

La didascalia di un'immagine è in realtà un meta_dato associato all'immagine e la funzione get_post_gallery_images restituisce solo un URL, quindi nell'array non avrai altre informazioni.

Potresti provare qualcosa come:

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

    //ottieni l'ID del post dell'immagine
    $image_id = url_to_postid( $image_url ) 
    //ottieni le informazioni del "post" dell'immagine
    $image = get_post($image_id);
    //ottieni il titolo dell'immagine
    $image_title = $image->post_title;
    //ottieni la didascalia dell'immagine
    $image_caption = $image->post_excerpt;

?>                                

    <div class="item" style="background-image: url('<?php echo $image_url ?>'); background-size: cover">
        <div class="caption">                
            <!-- Qui voglio visualizzare Titolo/Didascalia/ALT/Descrizione dell'immagine -->
            <h2><?php echo $image_caption; ?> </h2>
        </div>                                        
    </div>
16 feb 2017 17:50:38