WordPress как на ладони
wordpress jino

get_attached_media() WP 3.6.0

Получает вложения (картинки, видео, аудио) прикрепленные к записи (посту). Получает объекты данных в виде массива.

Работает на основе: get_children()
Хуки из функции:
Возвращает

Массив объектов, найденных вложений или пустой массив: array()

Использование

$attach = get_attached_media( $type, $post );
$type(cтрока) (обязательный)
Тип вложений, которые нужно получить. Например: 'image', 'audio', 'video', 'video/mp4'.
$post(число/WP_Post)
ID записи вложения которой нужно получить.
По умолчанию: текущий пост

Примеры

#1 Получим вложения-картинки текущего поста

В этом примере мы получим данные картинок прилепленных к записи с ID=2018:

$media = get_attached_media( 'image', 2018 );
print_r( $media );

Этот код выведет на экран что-то такое:

Array
(
	[2024] => WP_Post Object
		(
			[ID] => 2024
			[post_author] => 1
			[post_date] => 2013-01-09 19:46:33
			[post_date_gmt] => 2013-01-09 15:46:33
			[post_content] => 
			[post_title] => ajax в WordPress
			[post_excerpt] => 
			[post_status] => inherit
			[comment_status] => open
			[ping_status] => open
			[post_password] => 
			[post_name] => ajax-in-wp
			[to_ping] => 
			[pinged] => 
			[post_modified] => 2013-01-09 19:46:33
			[post_modified_gmt] => 2013-01-09 15:46:33
			[post_content_filtered] => 
			[post_parent] => 2018
			[guid] => http://wp-kama.ru/wp-content/uploads/2013/01/ajax-in-wp.jpg
			[menu_order] => 0
			[post_type] => attachment
			[post_mime_type] => image/jpeg
			[comment_count] => 0
			[filter] => raw
		)
	[2000] => WP_Post Object
		(
			[ID] => 2024
			...
		)
)

#2 Получим первую картинку-вложение прикрепленную к записи

Этот код показывает, как получить первую картинку, которая прикреплена к посту с ID = 2018:

$media = get_attached_media( 'image', 2018 );
$media = array_shift( $media );

// ссылка на картинку
$image_url = $media->guid;

// выведем картинку в браузере
echo '<img src="'. $image_url .'" />';

Код get attached media: wp-includes/media.php WP 4.8.2

<?php
function get_attached_media( $type, $post = 0 ) {
	if ( ! $post = get_post( $post ) )
		return array();

	$args = array(
		'post_parent' => $post->ID,
		'post_type' => 'attachment',
		'post_mime_type' => $type,
		'posts_per_page' => -1,
		'orderby' => 'menu_order',
		'order' => 'ASC',
	);

	/**
	 * Filters arguments used to retrieve media attached to the given post.
	 *
	 * @since 3.6.0
	 *
	 * @param array  $args Post query arguments.
	 * @param string $type Mime type of the desired media.
	 * @param mixed  $post Post ID or object.
	 */
	$args = apply_filters( 'get_attached_media_args', $args, $type, $post );

	$children = get_children( $args );

	/**
	 * Filters the list of media attached to the given post.
	 *
	 * @since 3.6.0
	 *
	 * @param array  $children Associative array of media attached to the given post.
	 * @param string $type     Mime type of the media desired.
	 * @param mixed  $post     Post ID or object.
	 */
	return (array) apply_filters( 'get_attached_media', $children, $type, $post );
}

Cвязанные функции

Из раздела: Вложения (media файлы)

get_attached_media 12 комментариев
Полезные 1 Все
  • Юрий

    Добрый день! Хочу побеспокоить вас странным событием, когда проделываю эту простую манипуляцию мне выдаются не все вложения существующей записи. Причём как-то нелогично в разных постах, либо не все картинки, либо ни одной, либо одну... но никогда не видит все. Вы случайно не знаете с чем это может быть связано?

    $media = get_attached_media( 'image', 107);
    print_r( $media );
    Ответить2.3 года назад #
    • Kama4464

      Видимо у вас где-то добавляется сортировка по rand. Так не должно быть. Может вы ставили какой-то другой код, который должен вообще в другом месте сортировать записи как-то, возможно через хук pre_get_posts или какой-то другой из этой статьи wp_query например, posts_clauses.

      Дело в том, что если в этих хуках не хорошо проверить для какого запроса применяется код, то он может влиять на другие запросы совсем в неожиданных местах. Ваш случай похож на этот...

      Ответить2.3 года назад #
      • Юрий

        Благодарю за ответ и ваши советы, попробую поискать внимательнее проблему. Меня дезинформирует только,что весь мой php файл имеет следующий вид

        <?php
         include("../../../wp-config.php"); 
        $media = get_attached_media( 'image', 107);
         print_r(get_attached_media( 'image', 107 ));
         ?>

        не больше, не меньше, так что по идее ничего лишнего не должного влиять.

        Ответить2.3 года назад #
        • Kama4464

          Строка include("../../../wp-config.php"); подключает всю среду WordPress там, все плагины и коды из functions.php темы, там может быть все что угодно...

          Ответить2.3 года назад #
  • Nas_S

    Никак не могу понять почему get_attached_media() возвращает empty. Подскажите пожалуйста
    вот код

    $i=0;
    $res=get_posts( array('numberposts' => 200));
    do
    {
    	$id=$res[$i]->ID;
    	echo "".$id." $i";
    	var_dump(get_attached_media('',$id));
    	$i++;
    }
    while ($id!=NULL);
    Ответить2.1 года назад #
    • Kama4464

      Во-первых вам нужно указать тип вложения в первый параметр get_attached_media(). Один из: 'image', 'audio', 'video', 'video/mp4'.

      Во-вторых используйте цикл foreach():

      $res = get_posts( array('numberposts' => 200) );
      foreach( $res as $pst ){
      	print_r( get_attached_media('image', $pst->ID ) );
      }
      Ответить2.1 года назад #
  • Дмитрий

    а как получить ссылку , например на вторую картинку?

    Ответить2 года назад #
    • Kama4464
      $media = get_attached_media( 'image', 2018 );
      $attach = array_shift( $media ); // первый элемент массива
      if( $media )
      	$attach = array_shift( $media ); // второй элемент массива
      
      // ссылка на картинку
      $image_url = $media->guid;

      Или можно так

      $media = get_attached_media( 'image', 2018 );
      $second_attach = array_slice( $media, 1, 1 );
      
      // ссылка на картинку
      $second_attach = $media->guid;
      Ответить2 года назад #
  • Михаил

    Как получить количество закреплённых к записи картинок ? Нужно только число и ничего более.

    Ответить1.2 года назад #
    • Kama4464
      $media = get_attached_media( 'image', 2018 );
      $media_count = count( $media );
      echo $media_count; //> 15
      Ответить1.2 года назад #
  • Anton

    хм возникла странная проблема, если картинка уже была вставлена в каком-то посте, и затем я создал новый пост и вставил из архива медиа файлов эту же картинку в новый пост, то при обработке этого нового поста этой функцией, функция get_attached_media() возвращает пустой массив как и get_children()

    Ответить1.2 года назад #
    • Kama4464

      Это логично, потому что добавленная картинка относиться к другой записи и у этой соответственно нет прикрепленных картинок... Эти функции получают прикрепленные картинки, а не те которые вставлены в запись, в запись что угодно можно вставить и даже внешнюю картинку... Если вам нужны вставленные в запись картинки, то их нужно парсить из контента записи, в WP такой функции нет, но можно найти в сети...

      Ответить1.2 года назад #

Здравствуйте, !

Ваш комментарий