You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何规避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,提问作者Сергей Якушин

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 03:12:05