如何规避WordPress中foreach()参数必须为array|object的警告?
解决WordPress中分类法术语不存在时的foreach警告问题
问题根源在于get_the_terms()函数的返回规则:当目标文章没有对应分类法的术语时,函数会返回false而非空数组,直接用foreach遍历false就会触发「参数必须是数组/对象类型」的警告。
以下是两种可行的解决方法:
方法一:遍历前先做有效性判断
在执行foreach之前,先检查变量是否为有效数组,排除false的情况:
$featured_post = get_field('about_game'); if( $featured_post ): $permalink = get_permalink( $featured_post->ID ); $thumb = get_the_post_thumbnail ($featured_post->ID ); // 处理genre分类法 $terms_genre = get_the_terms( $featured_post->ID, 'genre' ); // 确认变量有效且为数组 if ( $terms_genre && is_array( $terms_genre ) ) { foreach( $terms_genre as $term_genre ) { if( $term_genre->count > 0 ) { echo '<a href="'. get_term_link( $term_genre ) .'">'. $term_genre->name .'</a>'; } } } // 处理developer分类法 $terms_developer = get_the_terms( $featured_post->ID, 'developer' ); if ( $terms_developer && is_array( $terms_developer ) ) { foreach( $terms_developer as $term_developer ) { if( $term_developer->count > 0 ) { echo '<a href="'. get_term_link( $term_developer ) .'">'. $term_developer->name .'</a>'; } } } endif;
方法二:用空数组兜底(PHP 7+适用)
利用PHP的空合并运算符,将get_the_terms()的返回值强制转为数组,即使返回false也会替换成空数组:
$featured_post = get_field('about_game'); if( $featured_post ): $permalink = get_permalink( $featured_post->ID ); $thumb = get_the_post_thumbnail ($featured_post->ID ); // 处理genre分类法,空数组兜底 $terms_genre = get_the_terms( $featured_post->ID, 'genre' ) ?: []; foreach( $terms_genre as $term_genre ) { if( $term_genre->count > 0 ) { echo '<a href="'. get_term_link( $term_genre ) .'">'. $term_genre->name .'</a>'; } } // 处理developer分类法,空数组兜底 $terms_developer = get_the_terms( $featured_post->ID, 'developer' ) ?: []; foreach( $terms_developer as $term_developer ) { if( $term_developer->count > 0 ) { echo '<a href="'. get_term_link( $term_developer ) .'">'. $term_developer->name .'</a>'; } } endif;
两种方法都能确保foreach的遍历对象始终是数组类型,彻底避免无术语时的警告。
内容的提问来源于stack exchange,提问作者Сергей Якушин
相关产品推荐
相关产品推荐

