Ticket #45933: 45933.9.diff
| File 45933.9.diff, 5.4 KB (added by , 7 years ago) |
|---|
-
src/wp-includes/functions.php
3026 3026 3027 3027 $have_gettext = function_exists( '__' ); 3028 3028 3029 if ( function_exists( 'is_wp_error' ) && is_wp_error( $message ) ) { 3030 if ( empty( $title ) ) { 3031 $error_data = $message->get_error_data(); 3032 if ( is_array( $error_data ) && isset( $error_data['title'] ) ) { 3033 $title = $error_data['title']; 3034 } 3035 } 3036 $errors = $message->get_error_messages(); 3037 switch ( count( $errors ) ) { 3038 case 0: 3039 $message = ''; 3040 break; 3041 case 1: 3042 $message = "<p>{$errors[0]}</p>"; 3043 break; 3044 default: 3045 $message = "<ul>\n\t\t<li>" . join( "</li>\n\t\t<li>", $errors ) . "</li>\n\t</ul>"; 3046 break; 3047 } 3048 } elseif ( is_string( $message ) ) { 3049 $message = "<p>$message</p>"; 3050 } 3029 $result = _wp_die_process_input( $message, $title, $r ); 3030 if ( isset( $result['additional_errors'] ) && ! empty( $result['additional_errors'] ) ) { 3031 $message = "<ul>\n\t\t<li>" . $result['message'] . "</li>\n\t\t<li>" . join( "</li>\n\t\t<li>", $result['additional_errors'] ) . "</li>\n\t</ul>"; 3032 } else { 3033 $message = "<p>" . $result['message'] . "</p>"; 3034 } 3051 3035 3036 3052 3037 if ( ! empty( $r['link_url'] ) && ! empty( $r['link_text'] ) ) { 3053 3038 $link_url = $r['link_url']; 3054 3039 if ( function_exists( 'esc_url' ) ) { … … 3065 3050 3066 3051 if ( ! did_action( 'admin_head' ) ) : 3067 3052 if ( ! headers_sent() ) { 3068 status_header( $r ['response'] );3053 status_header( $result['data']['status'] ); 3069 3054 nocache_headers(); 3070 3055 header( 'Content-Type: text/html; charset=utf-8' ); 3071 3056 } 3072 3057 3073 if ( empty( $title ) ) {3074 $title = $have_gettext ? __( 'WordPress › Error' ) : 'WordPress › Error';3075 }3076 3077 3058 $text_direction = 'ltr'; 3078 3059 if ( isset( $r['text_direction'] ) && 'rtl' == $r['text_direction'] ) { 3079 3060 $text_direction = 'rtl'; … … 3097 3078 wp_no_robots(); 3098 3079 } 3099 3080 ?> 3100 <title><?php echo $ title; ?></title>3081 <title><?php echo $result['data']['title']; ?></title> 3101 3082 <style type="text/css"> 3102 3083 html { 3103 3084 background: #f1f1f1; … … 3241 3222 3242 3223 $r = wp_parse_args( $args, $defaults ); 3243 3224 3244 $data = array( 3245 'code' => 'wp_die', 3246 'message' => $message, 3247 'status' => $r['response'], 3248 ); 3225 $result = _wp_die_process_input( $message, $title, $r ); 3249 3226 3250 3227 if ( ! headers_sent() ) { 3251 3228 header( 'Content-Type: application/json; charset=utf-8' ); 3252 if ( null !== $r['response'] ) { 3253 status_header( $r['response'] ); 3229 nocache_headers(); 3230 if ( null !== $result['data']['status'] ) { 3231 status_header( $result['data']['status'] ); 3254 3232 } 3255 3233 } 3256 3234 3257 echo wp_json_encode( $ data);3235 echo wp_json_encode( $result ); 3258 3236 die(); 3259 3237 } 3260 3238 … … 3276 3254 global $wp_xmlrpc_server; 3277 3255 $defaults = array( 'response' => 500 ); 3278 3256 3279 $r = wp_parse_args( $args, $defaults ); 3257 $r = wp_parse_args( $args, $defaults ); 3258 $result = _wp_die_process_input( $message, $title, $r ); 3280 3259 3281 3260 if ( $wp_xmlrpc_server ) { 3282 $error = new IXR_Error( $r ['response'], $message);3261 $error = new IXR_Error( $result['data']['status'], $result['message'] ); 3283 3262 $wp_xmlrpc_server->output( $error->getXml() ); 3284 3263 } 3285 3264 die(); … … 3303 3282 ); 3304 3283 $r = wp_parse_args( $args, $defaults ); 3305 3284 3306 if ( ! headers_sent() && null !== $r['response'] ) { 3307 status_header( $r['response'] ); 3285 $result = _wp_die_process_input( $message, $title, $r ); 3286 3287 if ( ! headers_sent() && null !== $result['data']['status'] ) { 3288 status_header( $result['data']['status'] ); 3289 nocache_headers(); 3308 3290 } 3309 3291 3310 if ( is_scalar( $ message) ) {3311 die( (string) $ message);3292 if ( is_scalar( $result['message'] ) ) { 3293 die( (string) $result['message'] ); 3312 3294 } 3313 3295 die( '0' ); 3314 3296 } … … 3331 3313 } 3332 3314 3333 3315 /** 3316 * Helper function to process input from wp_die requests and format them into a usable array. 3317 * 3318 * @since 5.1.0 3319 * @access private 3320 * 3321 * @param $message 3322 * @param title 3323 * @param array $args 3324 * 3325 * @return array $results 3326 */ 3327 function _wp_die_process_input( $message = '', $title = '', array $args = array() ) { 3328 3329 $defaults = array( 'response' => 500, 'code' => 'wp_die', ); 3330 $args = wp_parse_args( $args, $defaults ); 3331 $data = array( 3332 'code' => $args['code'], 3333 'message' => '', 3334 'data' => array(), 3335 ); 3336 3337 if ( function_exists( 'is_wp_error' ) && is_wp_error( $message ) ) { 3338 $errors = array(); 3339 foreach ( (array) $message->errors as $code => $messages ) { 3340 foreach ( (array) $messages as $display_message ) { 3341 $errors[] = array( 3342 'code' => $code, 3343 'message' => $display_message, 3344 'data' => $message->get_error_data( $code ), 3345 ); 3346 } 3347 } 3348 if ( $errors ) { 3349 $data = $errors[0]; 3350 if ( count( $errors ) > 1 ) { 3351 // Remove the primary error. 3352 array_shift( $errors ); 3353 $data['additional_errors'] = $errors; 3354 } 3355 } 3356 3357 $error_data = $message->get_error_data(); 3358 if ( is_array( $error_data ) && isset( $error_data['title'] ) ) { 3359 $title = $error_data['title']; 3360 } 3361 } else { 3362 $data ['message'] = $message; 3363 } 3364 3365 if ( ! isset( $data['data']['status'] ) ) { 3366 $data['data']['status'] = $args['response']; 3367 } 3368 3369 if ( empty( $title ) ) { 3370 $have_gettext = function_exists( '__' ); 3371 $title = $have_gettext ? __( 'WordPress › Error' ) : 'WordPress › Error'; 3372 } 3373 3374 $data['data']['title'] = $title; 3375 3376 return $data; 3377 } 3378 3379 /** 3334 3380 * Encode a variable into JSON, with some sanity checks. 3335 3381 * 3336 3382 * @since 4.1.0