diff --git a/src/wp-includes/functions.php b/src/wp-includes/functions.php index 6be8fb4600..f69db20f54 100644 --- a/src/wp-includes/functions.php +++ b/src/wp-includes/functions.php @@ -2801,15 +2801,32 @@ function wp_send_json_success( $data = null ) { /** * Send a JSON response back to an Ajax request, indicating failure. * + * If the `$data` parameter is a `WP_Error` object, the errors within the object are processed + * and output as an array of error codes and corresponding messages. All other types are + * output without further processing. + * * @since 3.5.0 + * @since 4.1.0 The `$data` parameter is now processed if a `WP_Error` object is passed in. * * @param mixed $data Data to encode as JSON, then print and die. */ function wp_send_json_error( $data = null ) { $response = array( 'success' => false ); - if ( isset( $data ) ) - $response['data'] = $data; + if ( isset( $data ) ) { + if ( is_wp_error( $data ) ) { + $result = array(); + foreach ( $data->errors as $code => $messages ) { + foreach ( $messages as $message ) { + $result[] = array( 'code' => $code, 'message' => $message ); + } + } + + $response['data'] = $result; + } else { + $response['data'] = $data; + } + } wp_send_json( $response ); }