Repository navigation
REST API: Clarify the invalid stored value error messages - #14840
dannflorea wants to merge 1 commit into
Conversation
Explain that a null reset is refused because the stored value does not match the registered schema, and add tests for the meta field cases. See #64019.
|
The following accounts have interacted with this PR and/or linked issues. I will continue to update these lists as activity occurs. Core Committers: Use this line as a base for the props when committing in SVN: To understand the WordPress project's expectations around crediting contributors, please review the Contributor Attribution page in the Core Handbook. Props Bot commandsYou can trigger Props Bot actions by commenting on this PR:
|
Test using WordPress PlaygroundThe changes in this pull request can previewed and tested using a WordPress Playground instance. WordPress Playground is an experimental project that creates a full WordPress instance entirely within the browser. Some things to be aware of
For more details about these limitations and more, check out the Limitations page in the WordPress Playground documentation. |
Trac ticket: https://core.trac.wordpress.org/ticket/64019
What
Rewords the
rest_invalid_stored_valueerror messages so they explain the actual cause. The error code and 500 status are unchanged for back-compat.All three messages share one mechanism: when a stored value fails schema validation, the REST API returns it as
null. A client that echoes the response back (as the block editor does) sends thatnull, and the update is refused so the stored data is not deleted.WP_REST_Meta_Fields::update_value()): "The %s meta field cannot be reset to null because its stored value does not match its registered schema."WP_REST_Settings_Controller::update_item()): "The %s setting cannot be reset to null because its stored value does not match its registered schema."Tests
The two meta field code paths had no coverage for
rest_invalid_stored_value. Added tests for both, including the echo-back case, asserting the stored values are left untouched.Testing instructions
register_post_meta( 'post', 'my_int', array( 'type' => 'integer', 'single' => true, 'show_in_rest' => true ) );update_post_meta( $post_id, 'my_int', 'not-a-number' );GET /wp/v2/posts/<id>returns"my_int": null.POST /wp/v2/posts/<id>with{"meta":{"my_int":null}}returns 500 with the new message, and the stored value is unchanged.Reproduced and verified on trunk with WordPress Playground (nightly, PHP 8.3).