如何在PHP中添加foreach循环读取ACF Repeater多营业时间行?
解决ACF Repeater营业时间多行显示问题
你说得对,只需要给$hours数组添加foreach循环就能遍历所有营业时间条目。原来的代码仅调用了数组第一个元素($hours[0]),所以只能显示一行数据。
修改后的完整代码
<ul> <?php foreach($locations as $location) { $title = get_the_title($location); $address = ''; $address .= get_field('address', $location) . '<br>'; $address .= get_field('city', $location) . ', '; $address .= get_field('state', $location) . ', '; $address .= get_field('zip_code', $location); $hours = get_field('days_open', $location); $phone = get_field('contact_number', $location); $email = get_field('contact_email', $location); ?> <li> <h3><?php echo $title; ?></h3> <address><?php echo $address; ?></address> <?php if($phone) { ?> <a href="tel:<?php echo $phone ?>"><?php echo $phone; ?></a> <?php }; ?> <?php if($email) { ?> <a href="mailto:<?php echo $email ?>"><?php echo $email; ?></a> <?php }; ?> <!-- 新增营业时间循环 --> <?php if($hours && is_array($hours)) { ?> <div class="location-hours"> <?php foreach($hours as $hour) { ?> <p><?php echo $hour['days'] . ': ' . $hour['times']; ?></p> <?php } ?> </div> <?php } ?> </li> <?php } ?> </ul>
关键修改说明
- 移除了原代码中单独调用
$hours[0]的片段,替换为遍历整个$hours数组的foreach循环 - 新增
is_array($hours)判断,确保变量为有效数组时再执行循环,避免出现报错 - 用
<div class="location-hours">包裹所有营业时间,方便后续样式调整;每行营业时间用<p>标签包裹,页面结构更清晰
修改后代码会自动读取并展示ACF Repeater中添加的所有营业时间条目。
内容的提问来源于stack exchange,提问作者Rafa971
相关产品推荐
相关产品推荐

