如何通过Woocommerce REST API更新产品的ACF自定义字段
存在的问题
你当前的实现有四个常见错误,都会导致ACF字段更新失败:
- 未开启对应字段组的REST API访问权限:ACF默认不会把字段组暴露给REST API,需要手动开启
- 调用的端点路径错误:ACF针对自定义文章类型的REST接口必须包含
posts层级,你用的路径缺少该层级 - 用字段别名而非字段全局key提交:默认情况下ACF REST API只识别
field_xxxxxx格式的全局字段key,直接填demo_url这类别名会被直接忽略 - 未携带有效鉴权凭证:如果请求实例没有绑定拥有产品编辑权限的身份凭证(应用密码/管理员Cookie),请求会被WordPress直接拦截
正确实现方案
前置操作
- 进入WordPress后台ACF字段组编辑页,找到对应字段组的「设置」板块,勾选「在REST API中显示」保存
- 找到
demo_url字段对应的全局key(点击字段编辑按钮,在URL的field_key参数中可以获取,格式为field_xxxxxx) - 确认你初始化
$woocommerce_tn请求实例时已经配置了有效的鉴权信息
调整后代码
$acf_data = [ "fields" => [ // 替换为你自己的demo_url字段对应的全局field key 'field_xxxxxx' => 'http://myurl' ] ]; // 补全端点路径的posts层级 $woocommerce_tn->put('/wp-json/acf/v3/posts/product/'.$product_tn->id, $acf_data);
可选配置:允许用字段别名提交
如果你不想用全局field key,可以在主题functions.php中添加以下钩子放开别名提交限制:
add_filter('acf/rest_api/field_settings/show_in_rest', '__return_true'); add_filter('acf/rest_api/field_settings/edit_in_rest', '__return_true');
添加完成后你就可以继续用demo_url作为字段键提交请求,不需要替换为全局key。
内容的提问来源于stack exchange,提问作者Francesco Raucci
相关产品推荐
相关产品推荐

