Как получить описание/заголовок/alt для изображения галереи?

16 февр. 2017 г., 16:15:38
Просмотры: 23.4K
Голосов: 4

Я отображаю изображение галереи, но также хочу показать его подпись. Я могу получить информацию, которую мы вводим при загрузке изображения в панели управления 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, я не нашел решения моей проблемы.
Я также нашел этот ответ, но я не знаю, работает ли он, и у меня возникли ошибки при его реализации в моем коде.

В любом случае, как я могу решить эту проблему?

0
Все ответы на вопрос 2
3

Вам нужно получить метаданные каждой картинки, добавьте это в ваш файл 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.

16 февр. 2017 г. 18:12:14
Комментарии

Потрясающе! Очень просто и понятно. Большое спасибо за помощь!

Zkk Zkk
16 февр. 2017 г. 19:45:26

Я новичок в WordPress и PHP - куда нужно вставить эту часть кода?

Yebach Yebach
15 мар. 2018 г. 10:14:52

@Yebach этот код работает с объектом поста, содержащим галерею изображений. Функция добавляется в functions.php, а логика вставляется в любой шаблон singular, где вы можете передать объект post в функцию

David Lee David Lee
20 мар. 2018 г. 04:48:36
0

Подпись к изображению на самом деле является метаданными, прикреплёнными к изображению, а функция 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>
16 февр. 2017 г. 17:50:38