0

I am trying to create a custom post using WordPress REST API. The problem is that I can create the custom post when logged in as an administrator. But when I try to create the post while logged in as a custom role 'new_role', the API is giving the below error response.

{
    "code": "rest_cannot_update",
    "message": "Sorry, you are not allowed to edit the letter_intro custom field.",
    "data": {
        "key": "letter_intro",
        "status": 403
    }
}

And the post get created without having the post_meta values. I tried adding the capability by adding the below code in 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);
...
...

But it is not working.

1 Answer 1

0

I was able to resolve it by using the below code.

$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);

Then add those capabilities to the required roles.

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);
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.