| | 3889 | // Ensure HTTP 500 status code for critical errors, even if headers were already sent. |
| | 3890 | // Check for fatal errors using error code 'internal_server_error' (language-independent). |
| | 3891 | $is_critical_error = false; |
| | 3892 | if ( function_exists( 'is_wp_error' ) && is_wp_error( $message ) ) { |
| | 3893 | $error_code = $message->get_error_code(); |
| | 3894 | $is_critical_error = ( 'internal_server_error' === $error_code ); |
| | 3895 | } elseif ( 'internal_server_error' === $parsed_args['code'] ) { |
| | 3896 | $is_critical_error = true; |
| | 3897 | } |
| | 3898 | |
| | 3899 | // Also ensure HTTP 500 if response is already set to 500 (from fatal error handler). |
| | 3900 | if ( $is_critical_error || 500 === $parsed_args['response'] ) { |
| | 3901 | $parsed_args['response'] = 500; |
| | 3902 | // Set HTTP status code even if headers were already sent. |
| | 3903 | if ( function_exists( 'http_response_code' ) ) { |
| | 3904 | http_response_code( 500 ); |
| | 3905 | } |
| | 3906 | } |
| | 3907 | |