WordPress 5.9自定义文章类型REST API无法返回ACF字段的问询
让ACF自定义字段显示在WordPress REST API中的方法(适配WP5.9+)
针对你遇到的问题,以下是几种可行的解决方案,适配WordPress 5.9及更高版本:
方法一:ACF内置REST API支持(最简方案)
- 进入WordPress后台的「自定义字段」页面,打开目标字段组的编辑界面
- 展开「设置」选项卡,找到「显示在REST API」选项,选择「是」
- 保存字段组后,重新请求
/wp-json/wp/v2/movies接口,自定义字段会以acf为顶级键名出现在响应数据中
方法二:代码手动注册字段(灵活控制)
如果需要更精细的控制(比如自定义字段键名、仅暴露指定字段),可以使用register_rest_field函数,将代码添加到主题的functions.php或自定义插件中:
function add_movie_acf_fields_to_rest() { register_rest_field('movie', 'movie_details', array( 'get_callback' => function($post) { // 方式1:返回所有ACF字段 return get_fields($post['id']); // 方式2:仅返回指定字段(示例) // return array( // 'director' => get_field('director', $post['id']), // 'release_year' => get_field('release_year', $post['id']) // ); }, 'schema' => null, )); } add_action('rest_api_init', 'add_movie_acf_fields_to_rest');
执行后,REST响应中会新增movie_details字段,包含你指定的ACF数据。
方法三:直接修改默认REST响应(平级显示字段)
如果希望自定义字段直接平级显示在响应根节点,而非嵌套在子键下,可使用rest_prepare_{post_type}钩子:
function modify_movie_rest_response($response, $post, $request) { $acf_fields = get_fields($post->ID); if ($acf_fields) { foreach ($acf_fields as $key => $value) { $response->data[$key] = $value; } } return $response; } add_filter('rest_prepare_movie', 'modify_movie_rest_response', 10, 3);
注意事项
- 确保ACF插件为最新版本,WP5.9+对其REST API兼容无问题
- 修改代码后,记得清理浏览器缓存及WordPress缓存插件的缓存
- 若使用自定义插件存放代码,需确保插件处于激活状态
内容的提问来源于stack exchange,提问作者Coder
相关产品推荐
相关产品推荐

