如何使用WordPressSharp在C#中填充ACF重复字段?
如何用WordPressSharp填充ACF重复字段?
嘿,我之前也跟你一样碰到过WordPressSharp处理ACF重复字段的问题!普通自定义字段能正常填充,但ACF重复字段就是拿不到值也填不进去,后来折腾了一阵终于搞懂了正确的处理方式,给你分享下:
首先,你要知道ACF重复字段的结构和普通自定义字段不一样——它本质是一个数组对象,每个元素里包含重复项的子字段键值对。而WordPressSharp默认的CustomField类需要你把这个数组序列化为JSON字符串,才能正确被ACF识别。
先看修改后的代码示例,我给你加了重复字段的处理逻辑:
using Newtonsoft.Json; using WordPressSharp; using WordPressSharp.Models; // ... using (var client = new WordPressClient(new WordPressSiteConfig { BaseUrl = "http://example.com", Username = "username", Password = "pass", BlogId = 1 })) { // 1. 构造ACF重复字段的内容:每个元素对应一个重复项,键是子字段的完整ACF字段键 var repeaterItems = new[] { new { field_123456_url = "google.com", // 替换成你实际的子字段键 field_123456_title = "Google" }, new { field_123456_url = "github.com", field_123456_title = "GitHub" } }; var customFields = new[] { // 你的普通自定义字段(正常保留) new CustomField { Key = "field_586c1a9332541", Value = "google.com" }, // 2. 处理ACF重复字段:把数组序列化为JSON字符串 new CustomField { Key = "field_your_repeater_key", // 替换成你重复字段的ACF字段键 Value = JsonConvert.SerializeObject(repeaterItems) } }; var post = new Post { PostType = "video", Title = "title", Content = "description", PublishDateTime = DateTime.Now, Status = "draft", CustomFields = customFields }; var id = client.NewPost(post); }
这里有几个关键要点要注意:
- 字段键必须用ACF的完整字段键:不管是重复字段本身还是子字段,都要使用ACF后台显示的
field_xxxxxxx格式的键,不能用你设置的字段名称(比如url或者repeater) - 必须序列化为JSON字符串:ACF的重复字段需要接收JSON格式的数组,所以要用
JsonConvert.SerializeObject把对象数组转成字符串(记得引用Newtonsoft.Json NuGet包) - 确保ACF支持REST/XML-RPC:如果你的WordPressSharp用的是REST API,要确保ACF已经启用了REST API支持(ACF Pro自带这个选项,免费版可以通过代码或者插件开启);如果是XML-RPC,ACF默认会处理自定义字段的JSON值
按照这个方式修改后,应该就能成功填充ACF重复字段了!
内容的提问来源于stack exchange,提问作者joei
相关产品推荐
相关产品推荐

