foreach文のエラーが出た時の対処方法

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;
    } 
} ?> 

Related Article

3 Comments & Tracbacks

Leave a Comment

Emailは公開されません。*は必須項目です。


*


Categorys

Tags

CSS3 ダッシュボード ヘッダー トラブル コードサンプル スライドショー コンテンツ 素材 jQueryプラグイン Facebook php 引っ越し お知らせ JavaScript CSS カテゴリー Shareボタン IE 投稿タイプ seo Photoshop HTML5 レスポンシブ サイドバー ナビゲーション タクソノミー WPセキュリティ Git カスタムメニュー Macアプリ PHPリファレンス SVG query_posts API WP使い方 iTunes データベース コメント function RSS 条件分岐 get_posts() スマートフォン Sass/Compass マルチサイト機能