【WordPress】カスタムフィールドテンプレートの画像表示エラー対処法

【WordPress】カスタムフィールドテンプレートの画像表示エラー対処法

WordPressでカスタムフィールドテンプレートを使用しての複数画像表示の際のエラー対処法をシェアします。もしもっといい方法がある場合は教えていただけると幸いです。

※2016/11 追記
複数画像をカスタムフィールドを使用して投稿したい場合は、Custom Field Suiteの方が個人的には便利で簡単です。

症状

画像取得コード

<?php
	$imgsize = "thumbnail";
	$productimgs = post_custom('ProductImage');
	if($productimgs){
	 foreach($productimgs as $perimg){
		$productImg = wp_get_attachment_image_src($perimg, $imgsize);
		list( $url, $w, $h) = $productImg;
	?>
		<img src="<?php echo $url; ?>">
	<?php
			}
	 }
?>

投稿する際に任意の枚数の画像を取得したくカスタムフィールドテンプレートを使用していたのですが、画像は保存されているのに記事ページにでてこない。色々試したところ複数の際は表示できるけど、一枚のときだけ表示ができないという症状でした。

原因

タグのsrcに画像URLを表示する形を取っていたのですが、どうもforeachの中に入っていってないようだったので$productimgsをechoで確認してみると、

200

でした。あれ、「Array」じゃない。※普通配列をechoした場合は「Array」が返ってきます。

というかこれ画像IDじゃね?

ということで確認してみるとやはり画像IDでした。カスタムフィールドテンプレートで画像を任意の枚数取得する場合、複数でないと配列で返ってこないらしいです。どうりでforeachの中が実行されないはず。※foreachは配列のみ使用可能です。

対処法

<?php
	$imgsize = "thumbnail";
	$productimgs = post_custom('ProductImage');
	if($productimgs){
		if(is_array($productimgs)){
		foreach($productimgs as $perimg){
		$productImg = wp_get_attachment_image_src($perimg, $imgsize);
		list( $url, $w, $h) = $productImg;
?>
		<img src="<?php echo $url; ?>">
<?php
			}
		}else{
			echo wp_get_attachment_image($productimgs); 
		}
	}
?>

受け取った値が配列かどうかを識別するis_array()を使用して、解決しました。

コードを簡単に解説するとis_array()で配列かどうか(複数or1枚)を判定し、1枚の場合は画像IDを返すのでそれを使用し画像を表示というコードです。

もともと複数写真を使用するつもりでのカスタムフィールドテンプレートを使用していたので、このエラーに気づきませんでした。もしかしたら同じようなエラーが出ている方は一度データの中身を確認してみたらいかがでしょうか。

もしこの記事がみなさんのためになったのなら、ぜひシェアをお願いします。やる気出るので。

関連する記事