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

WordPress网站foreach循环报错:Warning: 参数需为array|object类型

解决WordPress中foreach()参数类型错误的问题

问题原因

报错Warning: foreach() argument must be of type array|object的核心原因是get_field('event_host')返回的值不符合foreach的迭代要求:

  • 若ACF的event_host字段设置为单选(而非多选),get_field会返回单个对象/ID,而非数组;
  • 若该字段未填写内容,get_field可能返回null或false,这两种类型都无法被foreach遍历。

解决方案

1. 检查ACF字段配置

登录WordPress后台,进入自定义字段(ACF)的event_host字段设置:

  • 如果是「关系」「文章」「用户」类字段,确保允许选择多个值(Multiple values)选项已勾选;
  • 确认字段返回格式为「对象」或「ID」,多选场景下会返回数组,单选则返回单个值。

2. 添加类型校验代码

在foreach循环前增加类型检查,避免无效值导致报错:

<?php 
$dcHosts = get_field('event_host');

// 仅当$dcHosts是数组或对象时才执行遍历
if (is_array($dcHosts) || is_object($dcHosts)) {
    foreach($dcHosts as $companies) {
        // 额外校验$companies是否有效,避免空值或无效ID
        if ($companies) {
            echo get_the_title($companies);
        }
    }
}
?>

3. 强制转为数组(兼容单选/多选场景)

如果需要兼容字段单选和多选两种情况,可将返回值强制转为数组:

<?php 
$dcHosts = get_field('event_host');

// 确保$dcHosts始终是数组类型
$dcHosts = is_array($dcHosts) ? $dcHosts : (array)$dcHosts;

foreach($dcHosts as $companies) {
    if ($companies) {
        echo get_the_title($companies);
    }
}
?>

修改后的完整代码示例

<?php
get_header();
while (have_posts()){
    the_post(); ?>
    <div class="page-banner">
      <div class="page-banner__bg-image" style="background-image: url('<?php echo get_theme_file_uri('images/connection.jpg') ?>');"></div>
      <div class="page-banner__content container container--narrow">
        <h1 class="page-banner__title"><?php the_title(); ?></h1>
        </div>
      </div>
    </div>

    <div class="container container--narrow page-section">
    <div class="metabox metabox--position-up metabox--with-home-link">
        <p><a class="metabox__blog-home-link" href="<?php echo
        get_post_type_archive_link('event'); ?>"
          ><i class="fa fa-home" aria-hidden="true"></i> Events Home</a> 
          <span class="metabox__main"><?php the_title(); ?></span></p>
          </div>

    
        <div class="generic_content"><?php the_content(); ?></div>

        <?php 
        $dcHosts = get_field('event_host');
        
        // 添加类型检查
        if (is_array($dcHosts) || is_object($dcHosts)) {
            foreach($dcHosts as $companies) {
                if ($companies) {
                    echo get_the_title($companies);
                }
            }
        }
        
        ?>
</div>
<?php }
get_footer();
?>

内容的提问来源于stack exchange,提问作者cube901

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 06:35:26