使用WordPress REST API创建自定义类型文章失败,求解决方法
我来帮你捋捋这个问题——之前我也碰到过类似的情况,核心问题基本都出在自定义文章类型(CPT)的REST支持配置,或者端点使用错误上。按下面的步骤逐一排查,应该能解决:
1. 确保自定义文章类型开启了REST API支持
这是最容易忽略的关键点!你注册自定义文章类型的时候,必须在register_post_type函数里添加show_in_rest参数并设为true,否则WordPress不会把它暴露到REST API里。
举个注册示例:
register_post_type( 'my_custom_post', array( 'public' => true, 'label' => '我的自定义文章', 'show_in_rest' => true, // 必须开启这一项! 'rest_base' => 'custom-posts', // 可选,自定义REST端点的基础路径,默认是CPT的slug // 其他必要参数(比如支持的功能、菜单位置等)... ) );
修改完代码后,记得去WordPress后台的「设置→固定链接」页面,随便选一个固定链接格式然后保存,刷新一下重写规则,这个步骤很重要,不然新的REST端点可能不会生效。
2. 使用正确的REST API端点
你之前一直用wp-json/wp/v2/posts这个端点,这本来就是默认文章类型(post)的创建接口,所以不管你传什么数据,都会生成普通文章。
正确的端点应该是wp-json/wp/v2/[你的CPT slug],比如你的自定义文章类型slug是book,那创建接口就是http://example.com/wp-json/wp/v2/book。
不确定slug的话,可以先发送一个GET请求到http://example.com/wp-json/wp/v2/,看返回的路由列表里有没有你的CPT对应的端点,确认存在再发POST请求。
3. 检查POST请求的参数和格式
在Postman里要注意这几点:
- 「Body」选项卡选择「raw」,格式选「JSON」,确保
Content-Type请求头是application/json - 请求体里至少包含必填字段(比如
title、content、status),不需要额外传post_type参数(因为端点已经指定了类型)
示例请求体:
{ "title": "测试自定义文章", "content": "这是一篇通过REST API创建的自定义文章", "status": "publish" }
4. 确认认证和权限没问题
创建文章需要编辑权限,所以你的请求必须通过WordPress的认证:
- 如果是WordPress 5.6及以上版本,推荐用「应用密码」:在后台「用户→个人资料」里生成应用密码,然后在Postman的「Authorization」选项卡选「Basic Auth」,用户名是你的WP登录名,密码是生成的应用密码
- 检查当前用户是否有创建该自定义文章类型的权限,比如注册CPT时如果设置了自定义权限,要确保用户拥有对应的权限(比如
edit_my_custom_post)
5. 调试排查错误
如果还是不行,打开WP的调试模式看看日志:
在wp-config.php里添加:
define('WP_DEBUG', true); define('WP_DEBUG_LOG', true);
然后重新发送请求,去wp-content/debug.log里找相关错误提示,比如端点不存在、权限不足、参数错误等,这些日志能帮你快速定位问题。
内容的提问来源于stack exchange,提问作者linktoahref

