You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 16:29:58