WordPressでカスタムフィールドテンプレートを使用しての複数画像表示の際のエラー対処法をシェアします。もしもっといい方法がある場合は教えていただけると幸いです。
※2016/11 追記
複数画像をカスタムフィールドを使用して投稿したい場合は、Custom Field Suiteの方が個人的には便利で簡単です。
複数画像をカスタムフィールドを使用して投稿したい場合は、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を返すのでそれを使用し画像を表示というコードです。
もともと複数写真を使用するつもりでのカスタムフィールドテンプレートを使用していたので、このエラーに気づきませんでした。もしかしたら同じようなエラーが出ている方は一度データの中身を確認してみたらいかがでしょうか。
もしこの記事がみなさんのためになったのなら、ぜひシェアをお願いします。やる気出るので。