Как вывести видео в галерею вместе с изображениями — php?
Подскажите пожалуйста, как сделать так, что бы в галерее изображений можно было выводить еще и видео?
Есть php-код, который отображает только изображения. Как его изменить и что надо добавить?
<?php $project_gallery = get_field( "slajder" ); ?> <div class="row"> <?php if( $project_gallery ): ?> <div class="col-xl-8 col-lg-7 col-12"> <div class="project-slider"> <div class="project-slider__content" id="project-slider"> <?php foreach( $project_gallery as $image ): ?> <div class="project-slider__slide"> <img src="<?php echo $image['url']; ?>" alt="<?php echo $image['alt']; ?>" class="project-slider__image"> <video controls="" autoplay="" name="media" src="<?php echo $video['url']; ?>" type="video/mp4" class="project-slider__image"></video> //надо, что бы вот это выводилось вместе с изображениями </div> <?php endforeach; ?> </div> |
<?php $project_gallery = get_field( "slajder" ); ?> <div class="row"> <?php if( $project_gallery ): ?> <div class="col-xl-8 col-lg-7 col-12"> <div class="project-slider"> <div class="project-slider__content" id="project-slider"> <?php foreach( $project_gallery as $image ): ?> <div class="project-slider__slide"> <img src="<?php echo $image['url']; ?>" alt="<?php echo $image['alt']; ?>" class="project-slider__image"> <video controls="" autoplay="" name="media" src="<?php echo $video['url']; ?>" type="video/mp4" class="project-slider__image"></video> //надо, что бы вот это выводилось вместе с изображениями </div> <?php endforeach; ?> </div>
Дополнительно:
Извините, наверное я не правильно объясняю. Изначально код без этой строчки
<video controls="" autoplay="" name="media" src="<?php echo $video['url']; ?>" type="video/mp4" class="project-slider__image"></video> |
<video controls="" autoplay="" name="media" src="<?php echo $video['url']; ?>" type="video/mp4" class="project-slider__image"></video>
. Если я в админке в галерею добавляю видео, то к нему подставляется тег <img> и соответственно видео не отображается на сайте. Надо, что бы к видео подставлялся тег <video>. Надеюсь, что теперь понятно объяснил.
<?php $project_gallery = get_field( "slajder" ); ?> <div class="row"> <?php if( $project_gallery ): ?> <div class="col-xl-8 col-lg-7 col-12"> <div class="project-slider"> <div class="project-slider__content" id="project-slider"> <?php foreach( $project_gallery as $media ): ?> <div class="project-slider__slide"> <?php if( $media['mime_type'] === 'image/jpeg' || $media['mime_type'] === 'image/png' ): ?> <img src="<?php echo $media['url']; ?>" alt="<?php echo $media['alt']; ?>" class="project-slider__image"> <?php elseif( $media['mime_type'] === 'video/mp4' ): ?> <video controls="" autoplay="" name="media" src="<?php echo $media['url']; ?>" type="video/mp4" class="project-slider__image"></video> <?php endif; ?> </div> <?php endforeach; ?> </div> </div> </div> <?php endif; ?> </div> |
<?php $project_gallery = get_field( "slajder" ); ?> <div class="row"> <?php if( $project_gallery ): ?> <div class="col-xl-8 col-lg-7 col-12"> <div class="project-slider"> <div class="project-slider__content" id="project-slider"> <?php foreach( $project_gallery as $media ): ?> <div class="project-slider__slide"> <?php if( $media['mime_type'] === 'image/jpeg' || $media['mime_type'] === 'image/png' ): ?> <img src="<?php echo $media['url']; ?>" alt="<?php echo $media['alt']; ?>" class="project-slider__image"> <?php elseif( $media['mime_type'] === 'video/mp4' ): ?> <video controls="" autoplay="" name="media" src="<?php echo $media['url']; ?>" type="video/mp4" class="project-slider__image"></video> <?php endif; ?> </div> <?php endforeach; ?> </div> </div> </div> <?php endif; ?> </div>
- Спасибо за ответ! Не сразу заметил.
Нашел ответ. Если кому-нибудь понадобиться, вот рабочее решение!
Нужно заменить $image на $item, чтобы было более релевантно. Просто проверяйте $item['type'] тип файла, в случае с картинкой будет 'image', в случае с видео, будет 'video'соответственно.
<?php $project_gallery = get_field('slajder'); ?> <div class="row"> <?php if ($project_gallery): ?> <div class="col-xl-8 col-lg-7 col-12"> <div class="project-slider"> <div class="project-slider__content" id="project-slider"> <?php foreach($project_gallery as $item) : ?> <div class="project-slider__slide"> <?php if ($item['type'] === 'image') : ?> <img src="<?php echo esc_url($item['url']); ?>" alt="<?php echo esc_attr($item['alt']); ?>" class="project-slider__image"> <?php elseif ($item['type'] === 'video') : ?> <video controls="" autoplay="" name="media" src="<?php echo esc_url($item['url']); ?>" type="video/mp4" class="project-slider__image"></video> <?php endif; ?> </div> <?php endforeach; ?> </div> </div> </div> <?php endif; ?> </div> |
<?php $project_gallery = get_field('slajder'); ?> <div class="row"> <?php if ($project_gallery): ?> <div class="col-xl-8 col-lg-7 col-12"> <div class="project-slider"> <div class="project-slider__content" id="project-slider"> <?php foreach($project_gallery as $item) : ?> <div class="project-slider__slide"> <?php if ($item['type'] === 'image') : ?> <img src="<?php echo esc_url($item['url']); ?>" alt="<?php echo esc_attr($item['alt']); ?>" class="project-slider__image"> <?php elseif ($item['type'] === 'video') : ?> <video controls="" autoplay="" name="media" src="<?php echo esc_url($item['url']); ?>" type="video/mp4" class="project-slider__image"></video> <?php endif; ?> </div> <?php endforeach; ?> </div> </div> </div> <?php endif; ?> </div>
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос

Видео можно выводить в одной галерее с изображениями, но нужно разделить два типа элементов: картинки открывать как изображения, а видео — как iframe или HTML5 video. Если у вас сейчас галерея ожидает только attachment ID картинок, видео туда само не попадёт.
Один из рабочих вариантов — хранить массив элементов, где у каждого есть тип:
$items = [ ['type' => 'image', 'id' => 123], ['type' => 'video', 'url' => 'https://www.youtube.com/watch?v=xxxx'], ];
Вывод:
foreach ($items as $item) { if ($item['type'] === 'image') { $thumb = wp_get_attachment_image($item['id'], 'medium'); $full = wp_get_attachment_image_url($item['id'], 'large'); echo '<a href="' . esc_url($full) . '" class="gallery-item">' . $thumb . '</a>'; } if ($item['type'] === 'video') { echo '<a href="' . esc_url($item['url']) . '" class="gallery-item gallery-video">'; echo '<span>Видео</span>'; echo '</a>'; } }
Если видео загружены в медиатеку, проверяйте mime type:
$mime = get_post_mime_type($attachment_id); if (str_starts_with($mime, 'video/')) { echo wp_video_shortcode(['src' => wp_get_attachment_url($attachment_id)]); }
Для lightbox выбирайте библиотеку, которая умеет и изображения, и iframe/video. Иначе картинки будут работать, а видео будет просто открываться ссылкой.