WordPress REST API 创建自定义 post 类型不工作
WordPress REST API create custom post type not working
我正在尝试使用 WordPress REST API 创建自定义 post。问题是我可以在以管理员身份登录时创建自定义 post。但是,当我以自定义角色 'new_role' 登录并尝试创建 post 时,API 给出了以下错误响应。
{
"code": "rest_cannot_update",
"message": "Sorry, you are not allowed to edit the letter_intro custom field.",
"data": {
"key": "letter_intro",
"status": 403
}
}
并且 post 是在没有 post_meta
值的情况下创建的。我尝试通过在 function.php
中添加以下代码来添加功能
add_action('rest_api_init', function () {
$new_role = get_role('new_role');
$new_role->add_cap('edit_post', true);
$new_role->add_cap('edit_post_meta', true);
...
...
但它不起作用。
我使用下面的代码解决了这个问题。
$args = array(
'labels' => $labels,
'description' => 'Custom post',
'public' => true,
'menu_position' => 5,
'supports' => array('title', 'editor', 'thumbnail', 'author', 'excerpt', 'comments', 'custom-fields'),
'has_archive' => true,
'show_in_rest' => true,
'rest_base' => 'letters',
'capabilities' => array(
'edit_post' => 'edit_letter',
'edit_posts' => 'edit_letters',
'publish_posts' => 'publish_letters',
'read_post' => 'read_letter',
'delete_post' => 'delete_letter'
),
);
register_post_type('letter', $args);
然后将这些能力添加到所需角色。
function new_caps()
{
$new_role = get_role('new_role');
$new_role->add_cap('edit_letter', true);
$new_role->add_cap('edit_letters', true);
$new_role->add_cap('publish_letters', true);
$new_role->add_cap('read_letter', true);
$new_role->add_cap('delete_letter', true);
$admins = get_role( 'administrator' );
$admins->add_cap('edit_letter', true);
$admins->add_cap('edit_letters', true);
$admins->add_cap('publish_letters', true);
$admins->add_cap('read_letter', true);
$admins->add_cap('delete_letter', true);
}
add_action('init', 'new_caps', 11);
我正在尝试使用 WordPress REST API 创建自定义 post。问题是我可以在以管理员身份登录时创建自定义 post。但是,当我以自定义角色 'new_role' 登录并尝试创建 post 时,API 给出了以下错误响应。
{
"code": "rest_cannot_update",
"message": "Sorry, you are not allowed to edit the letter_intro custom field.",
"data": {
"key": "letter_intro",
"status": 403
}
}
并且 post 是在没有 post_meta
值的情况下创建的。我尝试通过在 function.php
add_action('rest_api_init', function () {
$new_role = get_role('new_role');
$new_role->add_cap('edit_post', true);
$new_role->add_cap('edit_post_meta', true);
...
...
但它不起作用。
我使用下面的代码解决了这个问题。
$args = array(
'labels' => $labels,
'description' => 'Custom post',
'public' => true,
'menu_position' => 5,
'supports' => array('title', 'editor', 'thumbnail', 'author', 'excerpt', 'comments', 'custom-fields'),
'has_archive' => true,
'show_in_rest' => true,
'rest_base' => 'letters',
'capabilities' => array(
'edit_post' => 'edit_letter',
'edit_posts' => 'edit_letters',
'publish_posts' => 'publish_letters',
'read_post' => 'read_letter',
'delete_post' => 'delete_letter'
),
);
register_post_type('letter', $args);
然后将这些能力添加到所需角色。
function new_caps()
{
$new_role = get_role('new_role');
$new_role->add_cap('edit_letter', true);
$new_role->add_cap('edit_letters', true);
$new_role->add_cap('publish_letters', true);
$new_role->add_cap('read_letter', true);
$new_role->add_cap('delete_letter', true);
$admins = get_role( 'administrator' );
$admins->add_cap('edit_letter', true);
$admins->add_cap('edit_letters', true);
$admins->add_cap('publish_letters', true);
$admins->add_cap('read_letter', true);
$admins->add_cap('delete_letter', true);
}
add_action('init', 'new_caps', 11);