WordPress调用update_post_meta()更新PostObject自定义字段的参数格式
问题核心原因
你使用的是Advanced Custom Fields(ACF)插件提供的Post Object类型自定义字段,该类字段在数据库中默认存储的是关联目标的数字类型文章ID,你直接传入下拉控件返回的字符串格式ID时,类型不匹配会导致ACF前端无法正常识别已存储的值,看似更新失败。
解决方法
有两种可用的更新方案,按需选择即可:
方案1:使用ACF官方提供的update_field()函数(最稳妥,无需自行处理格式)
ACF原生封装的字段更新函数会自动适配字段类型处理传入值,调用格式如下:
// 参数依次为:字段名称、关联目标文章ID、要更新的当前文章ID update_field('你的Post Object字段名', 目标文章ID, 要更新的文章ID);
示例:给ID为100的文章更新related_article字段,关联ID为200的文章:
update_field('related_article', 200, 100);
方案2:使用WordPress原生update_post_meta()函数
需要先把传入的字符串格式ID转为数字类型,再执行更新:
- 单选Post Object字段更新示例:
// 把下拉返回的字符串ID转为整数 $target_id = intval($_GET['你的字段名']); update_post_meta(100, 'related_article', $target_id);
- 多选Post Object字段更新示例(需提前在字段配置中开启多选):
// 批量把返回的字符串ID数组转为整数数组 $target_ids = array_map('intval', $_GET['你的字段名']); update_post_meta(100, 'related_article', $target_ids);
配套参考材料
- 测试版本脚本截图:

- 下拉选择控件返回结果参考:

- 自定义字段配置参考:

- 所用插件参考:

内容的提问来源于stack exchange,提问作者Mihail_OLARU
相关产品推荐
相关产品推荐

