WPってアップロードした時に、管理画面の設定>メディアで指定したサイズで
・サムネイル
・中サイズ
・大サイズ
それぞれの画像が自動的に生成される。
それを利用してカスタムフィールドで登録した画像の生成されたリサイズ画像を取得する。
より個別具体的にいうと、カスタムフィールドで画像登録してlightbox的な事したいんだけど、という時の対応。
これでできたけどスマートかどうかはわからない。
前提
- カスタムフィールドの数は10コとする(仮に)。
- フィールド名はimage01〜image10。
- フィールド内にはオリジナル画像のURLが入力される。
やってる事
- カスタムフィールドの画像(値/URL)とその個数を取得
- 表示しているエントリーに紐付けられてる画像(URL)とその個数を取得 ※ギャラリーで表示される画像群
- 1と2の値(URL)を比較して、カスタムフィールドに登録した画像のattachmentIDを取得する
- wp_get_attachment_image( or wp_get_attachment_image_src)にattachmentIDとサムネールの種類をわたして画像ゲット。
※コレ、訳あって画像登録のフロントエンドをカスタムフィールドにしてるけど、
並び替えの手軽さや管理しやすさ(一括アップロードなど)を考えるとギャラリーで管理するのが良いですね。
<?php if (have_posts()) : while (have_posts()) : the_post(); ?> <?php //1. カスタムフィールドの値を取得する。 for($i=1;$i<=10;$i++) { //前提でフィールド最大10としたので10回繰り返し $numb=sprintf("%02d",$i); //$iの数を1桁の場合、0(n)と2桁に $custom = post_custom('image'.$numb.''); //image0(n)を取り出して$customに格納 if($custom) { //custom $image_list[] = $custom; } else { break; //値がないならbreakしてるけど、image01とimage03は値あり、image02は空欄みたいな事があるなら、breakしないほうがいいか。 } } //$image_listの数を取得 $image_list_count = count($image_list); //2. このポストに関連付けされた画像ファイルを取得。 $attachments = get_children(array('post_parent' => get_the_ID(), 'post_type' => 'attachment', 'post_mime_type' => 'image', 'orderby' => 'menu_order', 'order' => 'ASC')); //↑このエントリーの編集画面のメディアアップロードダイアログ内、ギャラリー部分に表示される画像群を取得。 //'orderby' => 'menu_order'はギャラリー部分で指定した表示順。 //確認用:print_r($attachments); //$attachmentsの中身は //[attachmentID][post_author、その他いろいろ]みたいな感じになってる。 //3. 1と2の値(URL)を比較して、カスタムフィールドに登録した画像のattachmentIDを取得する for ($i=0; $i<=$image_list_count; $i++) { foreach ( $attachments as $key => $value ) { //$attachmentを展開する if ($attachments[$key]->guid == $image_list[$i] ) { //attachmentsの画像URLとカスタムフィールドの値を比較、一致したら以下。 //4. wp_get_attachment_image( or wp_get_attachment_image_src)にattachmentIDとサムネールの種類をわたして画像ゲット。 $large_url = wp_get_attachment_image_src($key,'large'); //attachmentIDが$keyの大サイズ(large)の画像の値を取得、large以外は、thumbnail,medium,full。 echo "<a href=\"".$large_url[0]."\">";//[0]がurl、[1]が幅、[2]が高さ、[3]はなんだろ。 echo wp_get_attachment_image($key,'thumbnail');//attachmentIDが$keyのサムネイルサイズ(thumbnail)の画像の表示タグ(<img>)を取得 echo "</a>"; } } } // 繰り返し用に配列削除しとく - 2010.07.01 追加 - unset($attachments); unset($image_list); ?> <?php endwhile; endif: ?> ※バックスラッシュが「\」マークになってる。。