WP_Fatal_Error_Handler::display_default_error_template( array $error, true|WP_Error $handled )

Displays the default PHP error template.

Description

This method is called conditionally if no ‘php-error.php’ drop-in is available.

It calls wp_die() with a message indicating that the site is experiencing technical difficulties and a login link to the admin backend. The ‘wp_php_error_message’ and ‘wp_php_error_args’ filters can be used to modify these parameters.

Parameters

$errorarrayrequired
Error information retrieved from error_get_last().
$handledtrue|WP_Errorrequired
Whether Recovery Mode handled the fatal error.

Source

protected function display_default_error_template( $error, $handled ) {
	if ( ! function_exists( '__' ) ) {
		wp_load_translations_early();
	}

	if ( ! function_exists( 'wp_die' ) ) {
		require_once ABSPATH . WPINC . '/functions.php';
	}

	if ( ! class_exists( 'WP_Error' ) ) {
		require_once ABSPATH . WPINC . '/class-wp-error.php';
	}

	if ( true === $handled && wp_is_recovery_mode() ) {
		$message = __( 'There has been a critical error on this website, putting it in recovery mode. Please check the Themes and Plugins screens for more details. If you just installed or updated a theme or plugin, check the relevant page for that first.' );
	} elseif ( is_protected_endpoint() && wp_recovery_mode()->is_initialized() ) {
		if ( is_multisite() ) {
			$message = __( 'There has been a critical error on this website. Please reach out to your site administrator, and inform them of this error for further assistance.' );
		} else {
			$message = __( 'There has been a critical error on this website. Please check your site admin email inbox for instructions.' );
		}
	} else {
		$message = __( 'There has been a critical error on this website.' );
	}

	$message = sprintf(
		'<p>%s</p><p><a href="%s">%s</a></p>',
		$message,
		/* translators: Documentation about troubleshooting. */
		__( 'https://wordpress.org/documentation/article/faq-troubleshooting/' ),
		__( 'Learn more about troubleshooting WordPress.' )
	);

	$args = array(
		'response' => 500,
		'exit'     => false,
	);

	/**
	 * Filters the message that the default PHP error template displays.
	 *
	 * @since 5.2.0
	 *
	 * @param string $message HTML error message to display.
	 * @param array  $error   Error information retrieved from `error_get_last()`.
	 */
	$message = apply_filters( 'wp_php_error_message', $message, $error );

	/**
	 * Filters the arguments passed to wp_die() for the default PHP error template.
	 *
	 * @since 5.2.0
	 *
	 * @param array $args Associative array of arguments passed to `wp_die()`. By default these contain a
	 *                    'response' key, and optionally 'link_url' and 'link_text' keys.
	 * @param array $error Error information retrieved from `error_get_last()`.
	 */
	$args = apply_filters( 'wp_php_error_args', $args, $error );

	$wp_error = new WP_Error(
		'internal_server_error',
		$message,
		array(
			'error' => $error,
		)
	);

	wp_die( $wp_error, '', $args );
}

Hooks

apply_filters( ‘wp_php_error_args’, array $args, array $error )

Filters the arguments passed to <a href="https://developer.wordpress.org/reference/functions/wp_die/" rel="function">wp_die()</a> for the default PHP error template.

apply_filters( ‘wp_php_error_message’, string $message, array $error )

Filters the message that the default PHP error template displays.

Changelog

VersionDescription
5.3.0The $handled parameter was added.
5.2.0Introduced.

User Contributed Notes

You must log in before being able to contribute a note or feedback.