foreach文のエラーが出た時の対処方法
先日、WordPressのカスタム投稿タイプのシングルページにて、表示中の投稿と同termの情報を表示したい場合があったのですが、同termの情報がない場合に、以下のようなエラー文がでてしまい困りました…。その時の対処法のメモです。
Warning: Invalid argument supplied for foreach() …
原因
上記の警告文はPHPの foreach文で配列データを取り出そうとした場合に、配列のデータが入っていない場合に表示されるようです。
対処方法
これを回避するには、まず配列データが入っているかを判定する必要があるとのこと…。
以下のような記述で配列データが入っているかを判定し、配列データが入っていた場合にのみ foreach文へ進めてその後の処理をおこなうことができます。
<?php // ↓ タームの情報を取得する $tarms = get_the_terms( $post ->ID, 'term名' ); // ↓取得したデータが配列かの判定 if (! is_array($tarms)) { // ↓$tarms に配列データが入ってない場合の処理 $tarms = array(array('title'=>'該当するデータはありません')); } else { // ↓$tarms に配列データが入っていた場合は foreach へ foreach ( $tarms as $tarm ) { $tarmname = $tarm -> name; $tarmslug = $tarm -> slug; } } ?> : : <?php endforeach; ?>
データが空だった場合は’該当データがありません’というデータを配列データで入れるので、それはそれでエラー回避できる仕組みのようです。
この方法でなんとかエラーを出さずにterm関連の表示ができました!
追記:もっとスマートな書き方
上記のような配列の判定するのをもっと短いコードで書けるようです。Twitterで教えて頂きました。
参考ページのような形で書き換えると以下のような感じでしょうか…3行ほど短くなりスマートになりました!次にエラーが出たときに使ってみようと思います。
<?php $tarms = get_the_terms( $post ->ID, 'term名' ); foreach ((array) $tarms as $tarm) { $tarmname = $tarm -> name; $tarmslug = $tarm -> slug; } } ?>
3 Comments & Tracbacks