@@ -3886,6 +3886,23 @@ function _default_wp_die_handler( $message, $title = '', $args = array() ) {
38863886 $ message .= "\n<p><a href='javascript:history.back()'> $ back_text</a></p> " ;
38873887 }
38883888
3889+ // Ensure HTTP 500 status code for critical errors, even if headers were already sent.
3890+ $ is_critical_error = false ;
3891+ if ( function_exists ( 'is_wp_error ' ) && is_wp_error ( $ message ) ) {
3892+ $ error_code = $ message ->get_error_code ();
3893+ $ is_critical_error = ( 'internal_server_error ' === $ error_code );
3894+ } elseif ( 'internal_server_error ' === $ parsed_args ['code ' ] ) {
3895+ $ is_critical_error = true ;
3896+ }
3897+
3898+ // Also ensure HTTP 500 if response is already set to 500 (from fatal error handler).
3899+ if ( $ is_critical_error || 500 === $ parsed_args ['response ' ] ) {
3900+ $ parsed_args ['response ' ] = 500 ;
3901+ if ( function_exists ( 'http_response_code ' ) ) {
3902+ http_response_code ( 500 );
3903+ }
3904+ }
3905+
38893906 if ( ! did_action ( 'admin_head ' ) ) :
38903907 if ( ! headers_sent () ) {
38913908 header ( "Content-Type: text/html; charset= {$ parsed_args ['charset ' ]}" );
@@ -4224,12 +4241,12 @@ function _xml_wp_die_handler( $message, $title = '', $args = array() ) {
42244241
42254242 $ xml = <<<EOD
42264243<error>
4227- <code> {$ parsed_args ['code ' ]}</code>
4228- <title><![CDATA[ {$ title }]]></title>
4229- <message><![CDATA[ {$ message }]]></message>
4230- <data>
4231- <status> {$ parsed_args ['response ' ]}</status>
4232- </data>
4244+ <code> {$ parsed_args ['code ' ]}</code>
4245+ <title><![CDATA[ {$ title }]]></title>
4246+ <message><![CDATA[ {$ message }]]></message>
4247+ <data>
4248+ <status> {$ parsed_args ['response ' ]}</status>
4249+ </data>
42334250</error>
42344251
42354252EOD ;
0 commit comments