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
相关产品推荐
相关产品推荐

