前端集合 - 关注前端技术和互联网免费资源

关注前端技术和互联网免费资源

分类儿

页面儿

搜索儿

前端集合 RSS订阅
Home » 经验记录 » 通过 WordPress rest api 更新 Advanced Custom Fields 字段时为什么会失败 ( 接口返回 acf: false )?

通过 WordPress rest api 更新 Advanced Custom Fields 字段时为什么会失败 ( 接口返回 acf: false )?

发布者:前端集合 // 发布时间:2025-12-10 21:04:00 // 分类:经验记录 // 访问: 23 次 // 热度:

这个问题困扰了我好几天,网上找了很多答案都行不通,问了一些 ai 也没解决。

最后还是查到了解决方案。

问题表现

不管是使用 js 代码还是通过 postman 这种工具,通过 WordPress rest api 创建或更新文章时,提交的 acf 相关字段明明有值,但是在后台全部都是空,即使我已经开始了 Advanced Custom Fields 相关字段的 Show in REST API 设置。

问题原因

既不是代码写得有问题,也不是权限问题,更不是网上说的不应该直接用字段名而应该用(Field Key)标签(后面跟着一串以 field_ 开头的字符串(例如:field_6578abc123def))这种说法。

真实的原因就是通过 WordPress rest api 不能直接修改 Advanced Custom Fields 的字段,只能读取。

所以要把这个限制解开。方法如下:

解决方案

// 1. 让 ACF 字段出现在 REST API 响应中(读取)
function add_acf_to_rest_response($data, $post, $context) {
    // 方式A:添加所有 ACF 字段
    $data->data['acf'] = get_fields($post->ID);
    // 方式B:只添加指定字段(推荐,减少数据量)
    // $data->data['acf'] = [
    //     'article_subtitle' => get_field('article_subtitle', $post->ID),
    //     'article_views' => get_field('article_views', $post->ID)
    // ];
    return $data;
}
add_filter('rest_prepare_post', 'add_acf_to_rest_response', 10, 3);

// 2. 允许通过 REST API 更新 ACF 字段(写入)
function update_acf_via_rest($post, $request) {
    // 验证权限:只有能编辑文章的用户才能更新
    if (!current_user_can('edit_post', $post->ID)) {
        return $post;
    }

    // 获取请求中的 ACF 数据(核心:从 request 中提取 acf 节点)
    $acf_data = $request->get_param('acf');
    
    // 仅当 acf 数据存在且为数组时更新
    if (!empty($acf_data) && is_array($acf_data)) {
        foreach ($acf_data as $field_name => $field_value) {
            // 使用 ACF 官方函数更新字段(自动验证字段类型)
            update_field($field_name, $field_value, $post->ID);
        }
    }

    return $post;
}
// 绑定到「更新文章」和「创建文章」的钩子
add_action('rest_after_update_post', 'update_acf_via_rest', 10, 2);
add_action('rest_after_insert_post', 'update_acf_via_rest', 10, 2);

通过以上设置,再次更新,WordPress 后台的 Advanced Custom Fields 相关字段 100% 有值了。

Tags: Wordpress, WordPress rest api 更新 Advanced Custom Fields, WordPress rest api, acf false, 更新 acf, Advanced Custom Fields 更新, Advanced Custom Fields

<< 好久没记录了
Top