From 8ea65c3c0dad24535e19ada5beb27265913bcf50 Mon Sep 17 00:00:00 2001 From: John Blackbourn Date: Fri, 21 Nov 2014 16:55:28 +0000 Subject: [PATCH] Add support for `WP_Error` objects passed to `wp_send_json_error()`. The error object gets output as an array of error codes and messages, rather than as an empty object. Fixes #28978 Props paulschreiber git-svn-id: https://develop.svn.wordpress.org/trunk@30506 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/functions.php | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) 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 ); }