Как получить описание/заголовок/alt для изображения галереи?
Я отображаю изображение галереи, но также хочу показать его подпись. Я могу получить информацию, которую мы вводим при загрузке изображения в панели управления WordPress, такую как "Заголовок/Подпись/ALT/Описание". Я хочу получить любой из этих параметров и отобразить его.
<?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">
<!-- Здесь я хочу отобразить Заголовок/Подпись/ALT/Описание изображения -->
<h2><?php echo $image_url->"DESCRIPTION/TITLE/ALT"; ?> </h2>
</div>
</div>
Читая документацию get_post_gallery_images, я не нашел решения моей проблемы.
Я также нашел этот ответ, но я не знаю, работает ли он, и у меня возникли ошибки при его реализации в моем коде.
В любом случае, как я могу решить эту проблему?
Вам нужно получить метаданные
каждой картинки, добавьте это в ваш файл functions.php
:
function get_post_gallery_images_with_info($postvar = NULL) {
if(!isset($postvar)){
global $post;
$postvar = $post;//если параметр не был передан
}
$post_content = $postvar->post_content;
preg_match('/\[gallery.*ids=.(.*).\]/', $post_content, $ids);
$images_id = explode(",", $ids[1]); //получаем список ID галереи в виде массива
$image_gallery_with_info = array();
//получаем информацию для каждого 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;
}
Используйте это в вашей логике следующим образом:
<?php
$gallery = get_post_gallery_images_with_info($post); //можно использовать и без параметров
foreach( $gallery as $image_obj ) :
?>
<div class="item" style="background-image: url('<?php echo $image_obj['src'] ?>'); background-size: cover">
<div class="caption">
<!-- Здесь я хочу отобразить Заголовок/Подпись/ALT/Описание изображения -->
<h2><?php echo $image_obj['title']." ". $image_obj['caption']." ".$image_obj['description']; ?> </h2>
</div>
</div>
<?php
endforeach;
?>
Результат будет выглядеть так:
Каждое изображение, возвращаемое функцией, представляет собой массив такого вида:
Array
(
[alt] => Alt Кофе
[caption] => Подпись кофе
[description] => Описание кофе
[href] => http://вашсайт/2017/02/14/привет-мир/кофе/
[src] => http://вашсайт/wp-content/uploads/sites/4/2017/02/кофе.jpg
[title] => кофе
)
Обратите внимание, что href
и src
разные: один - это постоянная ссылка, а другой - прямая URL
.

Подпись к изображению на самом деле является метаданными, прикреплёнными к изображению, а функция get_post_gallery_images возвращает только URL, поэтому в массиве у вас не будет никакой дополнительной информации.
Вы можете попробовать что-то вроде:
<?php
$gallery = get_post_gallery_images( $post );
foreach( $gallery as $image_url ) :
//получаем ID записи изображения
$image_id = url_to_postid( $image_url );
//получаем информацию о "записи" изображения
$image = get_post($image_id);
//получаем заголовок изображения
$image_title = $image->post_title;
//получаем подпись изображения
$image_caption = $image->post_excerpt;
?>
<div class="item" style="background-image: url('<?php echo $image_url ?>'); background-size: cover">
<div class="caption">
<!-- Здесь я хочу отобразить Заголовок/Подпись/ALT/Описание изображения -->
<h2><?php echo $image_caption; ?> </h2>
</div>
</div>
