カスタムフィールドに登録した画像のサムネールやらを取得する。

WPってアップロードした時に、管理画面の設定>メディアで指定したサイズで
・サムネイル
・中サイズ
・大サイズ
それぞれの画像が自動的に生成される。

それを利用してカスタムフィールドで登録した画像の生成されたリサイズ画像を取得する。
より個別具体的にいうと、カスタムフィールドで画像登録してlightbox的な事したいんだけど、という時の対応。
これでできたけどスマートかどうかはわからない。

前提

  • カスタムフィールドの数は10コとする(仮に)。
  • フィールド名はimage01〜image10。
  • フィールド内にはオリジナル画像のURLが入力される。

やってる事

  1. カスタムフィールドの画像(値/URL)とその個数を取得
  2. 表示しているエントリーに紐付けられてる画像(URL)とその個数を取得 ※ギャラリーで表示される画像群
  3. 1と2の値(URL)を比較して、カスタムフィールドに登録した画像のattachmentIDを取得する
  4. 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: ?>

※バックスラッシュが「\」マークになってる。。

コメントをどうぞ

メールアドレスが公開されることはありません。 が付いている欄は必須項目です