WordPress REST API中PUT请求无法修改自定义字段问题排查
WordPress REST API 修改自定义字段失败的问题解决
核心原因
你遇到的问题主要来自三个方面:
- 自定义字段
_company_mobile未注册为REST API可编辑字段,默认仅支持读取操作 - 单独修改字段时Postman的请求体JSON格式错误,或请求头配置不符合要求
- 可能存在身份验证缺失或权限不足,导致API拒绝修改操作
具体解决步骤
1. 注册自定义字段为可编辑的REST字段
WP REST API默认仅开放内置字段(如title、content),自定义字段需手动注册才能支持修改。在主题的functions.php中添加以下代码:
add_action('rest_api_init', function () { // 针对job-listings自定义文章类型,注册_company_mobile字段 register_rest_field('job-listings', '_company_mobile', [ 'get_callback' => function ($object) { return get_post_meta($object['id'], '_company_mobile', true); }, 'update_callback' => function ($value, $object) { // 验证用户编辑权限 if (!current_user_can('edit_post', $object->ID)) { return new WP_Error('rest_forbidden', '无修改权限', ['status' => 403]); } // 更新自定义字段内容 update_post_meta($object->ID, '_company_mobile', sanitize_text_field($value)); return true; }, 'schema' => [ 'description' => '公司联系电话', 'type' => 'string', 'context' => ['view', 'edit'] ] ]); });
注意代码中的job-listings要和你API路径里的自定义文章类型slug完全一致,添加后刷新站点再测试API请求。
2. 修正Postman的请求配置
单独修改字段时出现rest_invalid_json错误,大概率是请求格式问题:
- 设置请求头:在Postman的Headers面板添加
Content-Type: application/json,确保服务器识别JSON格式的请求体 - 规范请求体格式:请求体必须符合JSON语法,示例如下:
注意使用英文双引号,不要遗漏或多写逗号,避免多余的空格或换行干扰解析。{ "_company_mobile": "13800138000" }
3. 确认身份验证与权限
- 确保用于API请求的WordPress账号拥有
edit_posts权限(至少能编辑目标职位列表) - 在Postman中配置身份验证:比如使用Basic Auth(输入账号密码),或JWT Token(若安装了JWT插件),未验证的请求会被API拒绝修改操作
额外排查点
- 检查自定义字段的key是否拼写正确:比如是否是
_company_mobile,有没有漏掉下划线或拼写错误 - 如果使用了第三方职位列表插件(如WP Job Manager),需查看插件文档确认是否有专属的API字段规则,可能需要额外配置
内容的提问来源于stack exchange,提问作者Player
相关产品推荐
相关产品推荐

