Cum pot obține descrierea/titlul/alt pentru o imagine din galerie?
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ă?

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

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>
