如何通过WordPress REST API创建带标签和元数据的文章
WordPress REST API 创建文章自定义元数据写入失败修复方案
核心错误原因
两个问题直接导致meta写入失败:
- meta传参格式不符合API要求:WordPress REST API的
meta字段接收键值直接映射的平面对象,你测试的两种数组嵌套结构都不符合规范,会被接口直接忽略。 - 自定义字段默认无REST写入权限:WordPress安全机制默认拦截未显式开启REST支持的meta字段写入,就算格式传对,未注册的字段也不会写入数据库,后台自定义字段板块自然看不到内容。
修复步骤
1. 给自定义字段开启REST操作权限
在当前WordPress主题的functions.php文件(或自定义功能插件)中添加如下代码,注册需要用到的自定义字段并开启REST支持:
// 为post文章类型注册支持REST操作的自定义字段 add_action('init', function() { // 注册Color字段 register_post_meta('post', 'Color', [ 'type' => 'string', 'single' => true, 'show_in_rest' => true, // 核心配置:允许REST接口读写该字段 ]); // 注册Size字段 register_post_meta('post', 'Size', [ 'type' => 'string', 'single' => true, 'show_in_rest' => true, // 核心配置:允许REST接口读写该字段 ]); });
如果是给自定义文章类型添加字段,把
register_post_meta第一个参数的post替换为对应文章类型的slug即可。
2. 修正Python代码中的meta传参格式
把原代码中post配置的meta字段改为字典(键值对)格式,不要嵌套数组,修正后的post配置如下:
post = { "title": "This is a REST API test", "content": "This is a REST API <h1>test</h1>", "status": "publish", "categories": ['2'], "tags": [], # 正确meta格式:直接传键值对字典,无需套数组 "meta": { "Color": "Green", "Size": "S" } }
非推荐快速方案(无需单独注册字段)
如果不想逐个注册字段,可以在functions.php中添加如下钩子,放开编辑权限用户的meta写入能力:
// 仅给有文章编辑权限的用户放开meta写入 add_action('rest_api_init', function() { if (!current_user_can('edit_posts')) return; // 接管post插入时的meta写入逻辑 add_action('rest_after_insert_post', function($post, $request, $creating) { $meta = $request->get_param('meta'); if (empty($meta) || !is_array($meta)) return; foreach ($meta as $key => $value) { update_post_meta($post->ID, sanitize_key($key), sanitize_text_field($value)); } }, 10, 3); });
该方案未做细粒度权限校验,不建议生产环境使用
效果验证
重新运行Python脚本发起请求,接口返回的响应内容中会携带已写入的meta字段值,此时进入后台文章编辑页的「Custom Fields(自定义字段)」板块,就能看到正常写入的Color、Size字段及对应值。
自定义字段为空的异常截图
内容的提问来源于stack exchange,提问作者Druz
相关产品推荐
相关产品推荐

