WordPressでは、アップロードした画像や動画などは、メディアとして管理されます。
投稿や固定ページに貼り付けた画像などは、「添付した画像」などといいます。
「メディア」で管理することができますが、基本的には投稿や固定ページに添付されていることが前提なことがおおいですが、そうではなくて、メディアの中から特定の画像を一覧で表示したいときがありあす。
そんなときは、WP_Queryで取り出して表示するのがいいです。
画像の一覧を取得する
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
$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 '<img src="' . $images[0] . '" width="' . $images[1] . '" height="' . $images[2] . '"/>'; 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を追加します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
$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 を使っているので、ループの中で使います。
1 2 3 4 5 6 7 8 |
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; |