diff --git a/src/wp-includes/rest-api/endpoints/class-wp-rest-blocks-controller.php b/src/wp-includes/rest-api/endpoints/class-wp-rest-blocks-controller.php index b7286bea746e4..0ddde14e8dcb3 100644 --- a/src/wp-includes/rest-api/endpoints/class-wp-rest-blocks-controller.php +++ b/src/wp-includes/rest-api/endpoints/class-wp-rest-blocks-controller.php @@ -57,9 +57,19 @@ public function filter_response_by_context( $data, $context ) { unset( $data['title']['rendered'] ); unset( $data['content']['rendered'] ); - // Add the core wp_pattern_sync_status meta as top level property to the response. - $data['wp_pattern_sync_status'] = $data['meta']['wp_pattern_sync_status'] ?? ''; - unset( $data['meta']['wp_pattern_sync_status'] ); + /* + * Add the core wp_pattern_sync_status meta as top level property to the response. + * Handle both array and object (stdClass) meta values. + */ + if ( is_array( $data['meta'] ) && isset( $data['meta']['wp_pattern_sync_status'] ) ) { + $data['wp_pattern_sync_status'] = $data['meta']['wp_pattern_sync_status']; + unset( $data['meta']['wp_pattern_sync_status'] ); + } elseif ( is_object( $data['meta'] ) && property_exists( $data['meta'], 'wp_pattern_sync_status' ) ) { + $data['wp_pattern_sync_status'] = $data['meta']->wp_pattern_sync_status; + unset( $data['meta']->wp_pattern_sync_status ); + } else { + $data['wp_pattern_sync_status'] = ''; + } return $data; } diff --git a/src/wp-includes/rest-api/fields/class-wp-rest-meta-fields.php b/src/wp-includes/rest-api/fields/class-wp-rest-meta-fields.php index a9c3fbcde831a..e35abde61d88e 100644 --- a/src/wp-includes/rest-api/fields/class-wp-rest-meta-fields.php +++ b/src/wp-includes/rest-api/fields/class-wp-rest-meta-fields.php @@ -74,7 +74,8 @@ public function register_field() { * * @param int $object_id Object ID to fetch meta for. * @param WP_REST_Request $request Full details about the request. - * @return array Array containing the meta values keyed by name. + * @return array|object Array containing the meta values keyed by name, + * or an empty object if to ensure JSON object encoding. */ public function get_value( $object_id, $request ) { $fields = $this->get_registered_fields(); @@ -105,6 +106,11 @@ public function get_value( $object_id, $request ) { $response[ $name ] = $value; } + // Use stdClass so that JSON result is {} and not []. + if ( empty( $response ) ) { + return (object) array(); + } + return $response; } @@ -582,6 +588,10 @@ public static function prepare_value( $value, $request, $args ) { * @return array|false The meta array, if valid, false otherwise. */ public function check_meta_is_array( $value, $request, $param ) { + if ( is_object( $value ) ) { + $value = (array) $value; + } + if ( ! is_array( $value ) ) { return false; }