Categories: WordPress

WordPressでメディアのURLを取得する

WordPressでは、アップロードした画像や動画などは、メディアとして管理されます。

投稿や固定ページに貼り付けた画像などは、「添付した画像」などといいます。

「メディア」で管理することができますが、基本的には投稿や固定ページに添付されていることが前提なことがおおいですが、そうではなくて、メディアの中から特定の画像を一覧で表示したいときがありあす。

そんなときは、WP_Queryで取り出して表示するのがいいです。

画像の一覧を取得する

$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
$terms = get_terms( 'tenant-category', '' );
$the_query = new WP_Query( 
	array(
		'post_status' => 'any',
		'post_type' => 'attachment' ,
		'post_mime_type' => 'image' ,
		'posts_per_page' => 12 ,
		'nopaging' => false, 
		'paged' => $paged,
		'tax_query' => array(
			array(
				'taxonomy' => 'media_category',
				'field'	   => 'slug',
				'terms'	   => 'contest',
			)
			)	
		)
	);

if ($the_query->have_posts()) : while ($the_query->have_posts()) : $the_query->the_post(); 
		
	the_attachment_link( $the_query->post->ID ); //メディアをリンク付きで出力する

	echo wp_get_attachment_link( $the_query->post->ID , 'thumbnail' ); //メディアへのリンクをHTML付きで返す

	echo wp_get_attachment_url( $the_query->post->ID ); //メディアのURLを返す
	
	$images = wp_get_attachment_image_src( $the_query->post->ID, 'medium' ); //添付された画像のURLとサイズを配列で返す
	echo '';

endwhile;
else: 
endif;
wp_reset_query();

WP_Queryのpost_typeにattachmentを指定して取り出します。

the_attachment_link を使うと、HTMLタグごと出力してくれるので、ただ貼り付けるだけで画像を出力してくれます。が。出力サイズをフルサイズかサムネイルしか選べないので、
wp_get_attachment_link をったほうが便利です。

ただ、もうちょっと細かいことがしたかったら、URLを直接取得してタグは自力でかいたほうがいいこともあります。そんなときは、wp_get_attachment_url を使います。
あるいは、wp_get_attachment_image_src を使うと、画像のURLとサイズを配列で取得できます。

カテゴリに指定されたものだけ取得する

メディアにカテゴリをつけていた場合、そのカテゴリで出力する画像を指定できます。

WP_Queryのargsを次のようにtax_queryを追加します。

$the_query = new WP_Query( 
	array(
		'post_status' => 'any',
		'post_type' => 'attachment' ,
		'post_mime_type' => 'image' ,
		'posts_per_page' => 12 ,
		'nopaging' => false, 
		'paged' => $paged,
		'tax_query' => array(
			array(
				'taxonomy' => 'media_category',
				'field'	   => 'slug',
				'terms'	   => 'contest',
			)
			)	
		)
	);

固定ページや投稿ページに使われている画像を取得する

特定の固定ページや投稿ページに使われている(添付されている)画像を取得したいときは、get_attached_media を使います。以下の例では、get_the_ID を使っているので、ループの中で使います。

if ( have_posts() ) while ( have_posts() ) : the_post();

	$medias = get_attached_media( 'image', get_the_ID() );
	foreach($medias as $media){
		the_attachment_link( $media->ID );
	}

endwhile;
nakaike