通过WP API更新WordPress ACF行字段值失败如何解决
问题根因
更新不生效是ACF中继器(Repeater,即你提到的rows行特性)的接口更新规则导致的:通过WP REST API修改中继器字段值时,不能只传递行内单个待修改的子字段,必须传递对应行全部子字段的键值对,缺项会导致ACF直接忽略整组中继器的更新请求。
你之前两次尝试都只传了星期字段field_611218a978d03,漏掉了同组的开始时间、结束时间两个子字段,所以只有顶层普通字段contact能正常修改,sched字段的更新被静默丢弃了。
正确传参方式
补全中继器行内的所有子字段即可正常更新,完整可运行代码如下:
$api_response = wp_remote_post( 'domain.com/wp-json/wp/v2/person/765', array( 'headers' => array( 'Authorization' => 'Basic ' . base64_encode( 'user:pass' ) ), 'body' => array( 'acf' => array ( 'contact' => '2151', // 中继器必须传入完整行结构,包含该行所有子字段的键值对 'sched' => array( array( "field_611218a978d03" => "Tuesday", // 待修改的星期值 "field_6112197d78d04" => "00:00:00", // 保留原有开始时间 "field_6112199f78d05" => "17:00:00" // 保留原有结束时间 ) ) ), ) )); $body = json_decode( $api_response['body'],true);
避坑提示
- 若
sched字段下有多行排班数据,必须把所有行的完整子字段集合全部传入,仅传部分行会直接删除未传入的原有行数据 - 中继器子字段必须使用
field_xxx格式的字段键作为键名,不能用你在ACF后台配置的字段别名(比如weekday、start这类自定义名称),否则不会被识别 - 最稳妥的更新方式是先通过GET请求拉取该文章当前的完整ACF数据,在本地修改对应值后再整体提交,避免漏传字段导致原有数据丢失
内容的提问来源于stack exchange,提问作者kevin5i
相关产品推荐
相关产品推荐

