Make WordPress Core

Opened 2 years ago

Last modified 6 weeks ago

#40399 new defect (bug)

Post Status Inherited not Supported with REST API

Reported by: dfenton Owned by:
Milestone: Awaiting Review Priority: normal
Severity: normal Version: 4.7.3
Component: REST API Keywords:
Focuses: Cc:

Description (last modified by TimothyBlynJacobs)

I'm trying to use the REST API to update a post_meta field on an an image of post_type="attachment", which is itself attached to an existing post of post_type="post" that is published and password protected.

Since the image is an attachment that is attached to another post, WordPress has set the post_status of the attachment to "inherit".

When I try to update the attachment from the REST API endpoint I'm getting the following error:

Uncaught Error: Syntax error, unrecognized expression: {"code":"rest_invalid_param","message":"Invalid parameter(s): status","data":{"status":400,"params":{"status":"status is not one of publish, future, draft, pending, private."}}}

It's clear in the documentation that post_status="inherit" isn't supported by the REST API for Media endpoints but I'm not sure if this is a bug or merely an oversight. My feeling is that since Wordpress supports and sets attachments to "inherit" as a post_status, that the API should accept that, particularly when it's perfectly happy to deliver that status to me on a GET request.

Change History (3)

#1 @pputzer
6 months ago

Still valid as of 5.1-nightly. I just stumbled upon this while trying to reduce the maintenance load of a plugin by switching from AJAX to the REST API. A pity that the PostMeta models were removed from the API in the beta stage :(

This ticket was mentioned in Slack in #core-restapi by timothybjacobs. View the logs.

6 weeks ago

#3 @TimothyBlynJacobs
6 weeks ago

  • Description modified (diff)

You should absolutely be able to PUT back the response from a GET request. Perhaps we need to add a custom validate_callback the same way we did for templates in #39996.

In the meantime, to work around this you should be able to omit the status field from your request and WordPress will ignore it.

Note: See TracTickets for help on using tickets.