Cum pot obține descrierea/titlul/alt pentru o imagine din galerie?

16 feb. 2017, 16:15:38
Vizualizări: 23.4K
Voturi: 4

Afișez o galerie de imagini dar vreau să afișez și descrierea pentru fiecare imagine. Pot obține informațiile pe care le introducem când încărcăm o imagine în WordPress Dashboard precum "Titlu/Descriere/ALT/Descriere". Vreau să obțin oricare dintre acestea și să le afișez.

<?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">                
            <!-- Aici vreau să afișez Titlul/Descrierea/ALT/Descrierea imaginii -->
            <h2><?php echo $image_url->"DESCRIPTION/TITLE/ALT"; ?> </h2>
        </div>                                        
    </div>

Citind documentația pentru get_post_gallery_images nu am găsit o soluție pentru problema mea.
Am găsit și acest răspuns dar nu știu dacă funcționează și am erori când încerc să-l implementez în codul meu.

Oricum, cum pot rezolva această problemă?

0
Toate răspunsurile la întrebare 2
3

Trebuie să obții metadata pentru fiecare imagine, adaugă acest cod în fișierul tău functions.php:

function get_post_gallery_images_with_info($postvar = NULL) {
    if(!isset($postvar)){
        global $post;
        $postvar = $post;//dacă parametrul nu a fost trimis
    }


    $post_content = $postvar->post_content;
    preg_match('/\[gallery.*ids=.(.*).\]/', $post_content, $ids);
    $images_id = explode(",", $ids[1]); //obținem lista de ID-uri ale galeriei ca un Array


    $image_gallery_with_info = array();
    //obținem informațiile pentru fiecare 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;
}

folosește-o în logica ta astfel:

<?php    
    $gallery = get_post_gallery_images_with_info($post); //poți folosi și fără parametri
    foreach( $gallery as $image_obj ) :    
?>                                

    <div class="item" style="background-image: url('<?php echo $image_obj['src'] ?>'); background-size: cover">
        <div class="caption">                
            <!-- Aici vreau să afișez Titlul/Caption-ul/ALT-ul/Descrierea imaginii -->
            <h2><?php echo $image_obj['title']." ". $image_obj['caption']." ".$image_obj['description']; ?> </h2>
        </div>                                        
    </div>
<?php    
endforeach;
?>

va afișa astfel:

descrierea imaginii aici

fiecare imagine returnată de funcție este un array de genul:

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

observă că href și src sunt diferite, unul este permalink-ul și celălalt este URL-ul direct.

16 feb. 2017 18:12:14
Comentarii

Uimitor! Foarte simplu și elegant. Mulțumesc mult pentru ajutor!

Zkk Zkk
16 feb. 2017 19:45:26

Sunt nou în WordPress și PHP - unde ați inserat această parte din cod?

Yebach Yebach
15 mar. 2018 10:14:52

@Yebach acest lucru funcționează cu un obiect post care are o galerie de imagini, funcția se adaugă în functions.php iar logica în orice șablon singular unde poți furniza un obiect post funcției

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

Titlul unei imagini este de fapt meta_date atașate imaginii, iar get_post_gallery_images returnează doar un URL, deci în array nu vei avea alte informații.

Ai putea încerca ceva de genul:

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

    //obține ID-ul postului imagine
    $image_id = url_to_postid( $image_url ) 
    //obține informațiile "post" ale imaginii
    $image = get_post($image_id);
    //obține titlul imaginii
    $image_title = $image->post_title;
    //obține descrierea imaginii
    $image_caption = $image->post_excerpt;

?>                                

    <div class="item" style="background-image: url('<?php echo $image_url ?>'); background-size: cover">
        <div class="caption">                
            <!-- Aici vreau să afișez Titlul/Descrierea/ALT-ul/Descrierea imaginii -->
            <h2><?php echo $image_caption; ?> </h2>
        </div>                                        
    </div>
16 feb. 2017 17:50:38