WordPress: как вывести все картинки поста (страницы)

Часто бывает необходимо получить src всех картинок поста или стационарной страницы, например, в виде массива для последующей верстки шаблона. Сделать это можно многими способами. Но тут есть некоторые тонкости.

Первый способ

Для получения и вывода всех изображений, прикрепленных посту, можно воспользоваться функцией get_posts(). В аргументах функции надо задать: post_parent - id поста, картинки которого мы хотим получить, post_type' => 'attachment', 'post_mime_type' => 'image', остальное - по вкусу.

$args = array(
		'order'          => 'ASC',
		'post_type'      => 'attachment',
		'post_parent'    => '26',
		'post_mime_type' => 'image',
		'post_status'    => null,
		'numberposts'    => -1
	);
$attachments = get_posts($args);
if ($attachments) {
	foreach ($attachments as $attachment) {
	$img_url = wp_get_attachment_image_url($attachment->ID, full);
	}
}
wp_reset_postdata();

Не забываем ставить wp_reset_postdata()!

Картинки можно вывести, например, в виде галереи prettyPhoto:

<ul class="gallery">
	<li>>a title="Фото" href="<?php echo $img_url; ?>" rel="prettyPhoto[gallery1]"><img src="<?php echo $img_url; ?>" alt="Фото" /></a></li>
</ul>

Второй способ

Можно использовать функцию get_page_children() - она получает все дочерние элементы, в том числе и рисунки.

$my_wp_query = new WP_Query();
$img_pages = $my_wp_query->query(array('post_type' => 'attachment','post_mime_type' => 'image'));
$img_children=get_page_children( $post->ID, $img_pages );

Это вставляется внутрь основного цикла. $post->ID - это id текущего поста в цикле. Если нужны картинки конкретного поста, ставим сюда конкретный ID.

Третий способ

Самый короткий и простой способ - получить изображения с помощью get_attached_media():

$imgs = get_attached_media( 'image', $post->ID  );
foreach($imgs as $img){
$image_url = $img->guid;
echo '<img src="'. $image_url .'" />';
}

Когда это не работает

Если при вставке картинок в пост они не загружались с компьютера, а брались из медиа-библиотеки, все три способа, приведенные выше не сработают, если картинки были уже прикреплены ранее к какому-то другому посту. Но выход есть: нужно получить текст поста в переменную и с помощью регулярного выражения вытащить из него src картинок. Далее можно сверстать страницу по своему вкусу.

<?php $str= get_the_content();
preg_match_all('/src="([^"]+)"/i', $str, $matches);
$img_urls = $matches[1]; ?>
<?php if($img_urls) { ?>
<ul class="gallery">
<? foreach ($img_urls as $img_url) {?>
<li><a href="<?php echo $img_url; ?>" rel="prettyPhoto[cat-<?php echo $post->ID; ?>]" title="<?php the_title(); ?>"><img src="<?php echo $img_url; ?>" alt="" /></a></li>
<?php }} ?>
</ul>

Иконка поста

Вывести иконку поста можно, например, так:

$image_url = wp_get_attachment_image_src( get_post_thumbnail_id(), 'medium');
echo '<div class="post_thumbnail"><img src="'.$image_url[0].'" alt="" /></div>';

Оставить комментарий

Ваш e-mail не будет опубликован