Задать вопрос

Как реализовать вывод описания фотографии в WordPress?

На сайте галерея формируется следующим образом
<?php
if( has_shortcode( $post->post_content, 'gallery' ) ) {
	$gallery = get_post_gallery_images( $post->ID );

	foreach( $gallery as $image ) {
		?>
		<div class="gallery-box-img">
			<div class="gallery-img">
				<a href="<?php echo str_replace('-150x150','',$image); ?>" class="lightbox" rel="gallery">
					<img src="<?php echo $image; ?>" alt="">
				</a>
			</div>
		</div>
		<?php
	}
}
?>

Фотографии выводятся как надо, но требуется так же выводить описание фотографий задаваемое в админке под каждым фото в галерее. По функциям галереи в WP почему то очень мало документации, многое приходится делать методом тыка, попытка залезть в ядро, результатов не принесла, ибо сложновато.
  • Вопрос задан
  • 6801 просмотр
Подписаться 2 Оценить Комментировать
Решения вопроса 1
HeadOnFire
@HeadOnFire
PHP, Laravel & WordPress Evangelist
1. Зачем через `has_shortcode();`, можно ведь по-другому...
2. Немного модифицированное предложение @ZetRider:
if ( get_post_gallery() ) :
		$gallery = get_post_gallery( get_the_ID(), false );
// array of ids;
		$ids = explode(',', $gallery['ids']);
// array of urls;
		$images = $gallery['src'];
		$i = 0;
		foreach( $images as $image ) {
			$title = get_the_title($ids[$i]);
// тут свой формат вывода
			echo '<img src="'.$image.'"><span>'.$title.'</span><br>';
			$i++;
		}
	endif;


Но, функция `get_the_title();` дает нам только 1, и не самое лучшее поле. Имея массив IDшек (а это айдишки attachment'ов) можно воспользоваться одной из функций именно аттачментов - там вернется больше данных. Например, можно заюзать `wp_get_attachment_image()`, `wp get attachment metadata()`.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Можно так:

if( has_shortcode( $post->post_content, 'gallery' ) ) {
    $gallery 		= get_post_gallery($post->ID, false);
    $gallery_ids 	= explode(',', $gallery['ids']);
    $g_i = 0;
    foreach( $gallery['src'] as $image ) {
        $title_img = get_the_title($gallery_ids[$g_i]);
        ?>
        <div class="gallery-box-img">
            <div class="gallery-img">
                <a href="<?php echo str_replace('-150x150','',$image); ?>" class="lightbox" rel="gallery">
                    <img src="<?php echo $image; ?>" alt="<?php echo $title_img; ?>">
                </a>
            </div>
        </div>
        <?php
		$g_i++;
    }
}


это конечно решение, но больше похоже на костыль.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы