REST API: Improve error handling in REST meta fields
This update modifies the error handling mechanism in the REST API meta fields functionality. Instead of halting execution and returning on the first encountered error, it now collects all errors in a WP_Error object and continues execution. Thus, this enhancement enables handling and displaying of multiple errors in a single response, improving the debugging process. Props TimothyBlynJacobs, spacedmonkey, hellofromTonya, oglekler. Fixes #48823. Built from https://develop.svn.wordpress.org/trunk@57611 git-svn-id: http://core.svn.wordpress.org/trunk@57112 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
parent
31a092799f
commit
9df3515569
|
@ -141,6 +141,7 @@ abstract class WP_REST_Meta_Fields {
|
||||||
*/
|
*/
|
||||||
public function update_value( $meta, $object_id ) {
|
public function update_value( $meta, $object_id ) {
|
||||||
$fields = $this->get_registered_fields();
|
$fields = $this->get_registered_fields();
|
||||||
|
$error = new WP_Error();
|
||||||
|
|
||||||
foreach ( $fields as $meta_key => $args ) {
|
foreach ( $fields as $meta_key => $args ) {
|
||||||
$name = $args['name'];
|
$name = $args['name'];
|
||||||
|
@ -163,35 +164,38 @@ abstract class WP_REST_Meta_Fields {
|
||||||
$current = get_metadata( $this->get_meta_type(), $object_id, $meta_key, true );
|
$current = get_metadata( $this->get_meta_type(), $object_id, $meta_key, true );
|
||||||
|
|
||||||
if ( is_wp_error( rest_validate_value_from_schema( $current, $args['schema'] ) ) ) {
|
if ( is_wp_error( rest_validate_value_from_schema( $current, $args['schema'] ) ) ) {
|
||||||
return new WP_Error(
|
$error->add(
|
||||||
'rest_invalid_stored_value',
|
'rest_invalid_stored_value',
|
||||||
/* translators: %s: Custom field key. */
|
/* translators: %s: Custom field key. */
|
||||||
sprintf( __( 'The %s property has an invalid stored value, and cannot be updated to null.' ), $name ),
|
sprintf( __( 'The %s property has an invalid stored value, and cannot be updated to null.' ), $name ),
|
||||||
array( 'status' => 500 )
|
array( 'status' => 500 )
|
||||||
);
|
);
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$result = $this->delete_meta_value( $object_id, $meta_key, $name );
|
$result = $this->delete_meta_value( $object_id, $meta_key, $name );
|
||||||
if ( is_wp_error( $result ) ) {
|
if ( is_wp_error( $result ) ) {
|
||||||
return $result;
|
$error->merge_from( $result );
|
||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( ! $args['single'] && is_array( $value ) && count( array_filter( $value, 'is_null' ) ) ) {
|
if ( ! $args['single'] && is_array( $value ) && count( array_filter( $value, 'is_null' ) ) ) {
|
||||||
return new WP_Error(
|
$error->add(
|
||||||
'rest_invalid_stored_value',
|
'rest_invalid_stored_value',
|
||||||
/* translators: %s: Custom field key. */
|
/* translators: %s: Custom field key. */
|
||||||
sprintf( __( 'The %s property has an invalid stored value, and cannot be updated to null.' ), $name ),
|
sprintf( __( 'The %s property has an invalid stored value, and cannot be updated to null.' ), $name ),
|
||||||
array( 'status' => 500 )
|
array( 'status' => 500 )
|
||||||
);
|
);
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
$is_valid = rest_validate_value_from_schema( $value, $args['schema'], 'meta.' . $name );
|
$is_valid = rest_validate_value_from_schema( $value, $args['schema'], 'meta.' . $name );
|
||||||
if ( is_wp_error( $is_valid ) ) {
|
if ( is_wp_error( $is_valid ) ) {
|
||||||
$is_valid->add_data( array( 'status' => 400 ) );
|
$is_valid->add_data( array( 'status' => 400 ) );
|
||||||
return $is_valid;
|
$error->merge_from( $is_valid );
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
$value = rest_sanitize_value_from_schema( $value, $args['schema'] );
|
$value = rest_sanitize_value_from_schema( $value, $args['schema'] );
|
||||||
|
@ -203,10 +207,15 @@ abstract class WP_REST_Meta_Fields {
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( is_wp_error( $result ) ) {
|
if ( is_wp_error( $result ) ) {
|
||||||
return $result;
|
$error->merge_from( $result );
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( $error->has_errors() ) {
|
||||||
|
return $error;
|
||||||
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
*
|
*
|
||||||
* @global string $wp_version
|
* @global string $wp_version
|
||||||
*/
|
*/
|
||||||
$wp_version = '6.5-alpha-57610';
|
$wp_version = '6.5-alpha-57611';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.
|
* Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.
|
||||||
|
|
Loading…
Reference in New Issue