本文详解如何使用 acf 的 `update_field()` 函数,精准更新深度嵌套(group 内含 group)结构中的子字段值,避免 `update_sub_field()` 在非 repeater 环境下失效的问题。
在 Advanced Custom Fields(ACF)中,当字段结构为「Group → Group → Sub Field」(即多层静态 Group 嵌套,非 Repeater 或 Flexible Content)时,update_sub_field() 无法直接使用——因为它仅在 have_rows() / the_row() 循环上下文中对 Repeater 或 Flexible Content 的当前行生效。而你的 Working hours 字段(field_61f453c010074)是顶层 Group,其下的 Monday(field_61f4570e89281)仍是普通 Group(非可重复),因此第一种写法逻辑错误:have_rows() 对 Group 字段无意义,循环不会执行,update_sub_field() 也因缺失有效行上下文而静默失败。
✅ 正确做法是:将整个嵌套 Group 结构视为一个关联数组,用 update_field() 一次性写入完整层级数据。ACF 支持通过嵌套数组键名映射字段层级,前提是数组结构与字段定义严格一致。
以下是你案例的推荐解决方案:
// 构建完整的 'Working hours' Group 数据(含所有星期)
$working_hours = array(
// Monday Group(注意:字段键名必须与 ACF 后台的 field key 完全一致)
'field_61f4570e89281' => array(
'field_61f4573589282' => !empty($_POST['monday_am']) ? intval($_POST['monday_am']) : 0, // Am
'field_61f4574589283' => !empty($_POST['monday_pm']) ? intval($_POST['monday_pm']) : 0, // Pm
),
// Tuesday Group
'field_61f7a30ffbcf0' => array(
'field_61f7a30ffbcf1' => !empty($_POST['tuesday_am']) ? intval($_POST['tuesday_am']) : 0,
'field_61f7a30ffbcf2' => !empty($_POST['tuesday_pm']) ? intval($_POST['tuesday_pm']) : 0,
),
// ... 其他星期同理(Wednesday 到 Sunday)
);
// 更新顶层 Group 字段
update_field('field_61f453c010074', $working_hours, $post_id);将字段结构抽象为常量或配置数组,提升可维护性:
$hour_fields = [
'monday' => ['group' => 'field_61f4570e89281', 'am' => 'field_61f4573589282', 'pm' => 'field_61f4574589283'],
'tuesday' => ['group' => 'field_61f7a30ffbcf0', 'am' => 'field_61f7a30ffbcf1', 'pm' => 'field_61f7a30ffbcf2'],
// ... 其他
];
$data = [];
foreach ($hour_fields as $day => $keys) {
$data[$keys['group']] = [
$keys['am'] => intval($_POST["{$day}_am"] ?? 0),
$keys['pm'] => intval($_POST["{$day}_pm"] ?? 0),
];
}
update_field('field_61f453c010074', $data, $post_id);掌握这一模式后,无论嵌套几层 Group(Gro
up → Group → Group → Text),只需按层级展开数组即可精准赋值——这是 ACF 处理复杂静态结构最稳定、最推荐的方式。
# 前端
# xss
# 常量
# 关联数组
# 字符串
# 循环
# number
# 键名
# 这是
# 这一
# 只需
# 适用于
# 仍是
# 因为它
# 不需
# 而非
# 中对
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
网络优化76771 】
【
技术知识130152 】
【
IDC云计算60162 】
【
营销推广131313 】
【
AI优化88182 】
【
百度推广37138 】
【
网站推荐60173 】
【
精选阅读31334 】
相关推荐:
Win11怎么设置桌面图标间距_Windows11注册表IconSpacing修改
Win11任务栏怎么调到左边_Win11开始菜单居左设置教程【步骤】
Mac怎么开启“任何来源”_Mac安装未签名应用的设置方法【解决】
php本地部署后session无法保存_session存储路径与权限设置技巧【技巧】
Win11怎么关闭搜索历史 Win11清除搜索框最近记录【隐私】
如何使用Golang操作指针变量_Golang解引用与赋值实践
Mac如何将HEIC图片格式转为JPG_Mac批量转换图片【指南】
PythonWeb前后端整合项目教程_FastAPIReact完整实例
c# F# 的 MailboxProcessor 和 C# 的 Actor 模型
Win11怎么压缩文件 Win11自带压缩解压功能使用【教程】
Windows10如何更改开机密码_Win10登录选项更改密码教程
Win10如何更改网络连接_Windows10以太网属性IP配置
如何使用Golang反射创建map对象_动态生成键值映射
MAC如何快速搜索大文件_MAC磁盘空间分析与冗余数据清理【方法】
Win11怎么开启智能存储_Windows11存储感知自动清理文件
Windows10怎么查看系统激活状态_Windows10激活状态查看方法【教程】
Win11怎么设置ipv4地址_Windows 11固定静态IP地址配置教程【详解】
Win11怎么关闭小组件_Win11禁用任务栏天气与小组件方法【设置】
MAC怎么在照片中添加水印_MAC自带编辑工具文字水印叠加【方法】
如何使用正则表达式提取以编号开头、后接多个注解的逻辑分组块
php后缀怎么变mp4能播放_让php伪装mp4正常播放的技巧【技巧】
Python lxml的etree和ElementTree有什么区别
如何在JavaScript中动态拼接PHP的base_url与JS变量
VSC里PHP变量未定义报错怎么解决_错误抑制技巧【解答】
php打包exe后无法读取环境变量_变量配置方法【教程】
mac怎么查看wifi密码_MAC查看已连接WiFi密码方法【技巧】
Win11怎么设置默认邮件应用_Windows11应用关联Mail设置
Windows10怎么卸载预装软件_Windows10预装软件卸载步骤【教程】
如何高效获取循环末次生成的 NumPy 数组最后一个元素(无需额外循环)
c# Task.ConfigureAwait(true) 在什么场景下是必须的
如何在Golang中使用encoding/gob序列化对象_存储和传输数据
短链接还原php提示内存不足_调整PHP内存限制设置【技巧】
Windows10如何重置此电脑_Windows10电脑重置方法【步骤】
PHP 中如何在函数内持久修改引用变量所指向的目标
c++ try_emplace用法_c++ map高效插入数据
Linux怎么修改用户密码_Linux系统passwd命令使用与权限管理【方法】
Win11怎么关闭通知消息_屏蔽Windows 11右下角弹窗通知设置【详解】
PHP主流架构如何处理会话管理_Session与Cookie【技巧】
Win11怎么设置任务栏透明_Windows11使用工具美化任务栏
Win11怎么清理C盘虚拟内存_Win11清理虚拟内存设置【教程】
Win10怎么关闭自动更新错误弹窗_Win10策略屏蔽失败提示减少干扰【防护】
Win11怎么设置应用分屏_Windows11贴靠布局Snap Layouts
如何用列表一次性对 DataFrame 的指定列应用字典映射
Win11文件夹预览图不显示怎么办_Win11缩略图缓存重建修复【教程】
Win11怎么禁用键盘自带键盘_Win11笔记本禁用内置键盘方法【教程】
Windows蓝屏错误0x0000001E怎么修复_KMODEEXCEPTIONNOTHANDLED排查
Go 中 defer 在 goroutine 内部不生效的原因与执行时机详解
Python 中将 ISO 8601 时间戳转换为日期并计算日期差值的完整教程
Win11局域网共享怎么设置 Win11文件夹网络共享教程【详解】
c# 服务器GC和工作站GC的区别和设置
2026-01-01
致胜网络推广营销网专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。