Make WordPress Core

03/21/2019 04:02:05 PM (5 years ago)

Bootstrap/Load: Introduce fatal error handler.

This changeset introduces a WP_Fatal_Error_Handler class that detects fatal errors and displays a more user-friendly message about the site experiencing technical difficulties.

Websites that have custom requirements in that regard can implement their own fatal error handler by adding a fatal-error-handler.php drop-in that returns the handler instance to use, which must be based on a class that inherits WP_Fatal_Error_Handler. That handler will then be used in place of the default one. Alternatively, the fatal error handler feature can be completely disable through a constant WP_DISABLE_FATAL_ERROR_HANDLER.

Websites that would like to modify specifically the error template displayed in the frontend can add a php-error.php drop-in that works similarly to the existing db-error.php drop-in. For more granular customization, the fatal error handler also includes new filters wp_should_handle_php_error, wp_php_error_message and wp_php_error_args.

Props afragen, bradleyt, flixos90, ocean90, schlessera, SergeyBiryukov, spacedmonkey, timothyblynjacobs.
See #46130, #44458.

1 edited


  • trunk/src/wp-settings.php

    r44808 r44962  
    1818// Include files required for initialization.
    1919require( ABSPATH . WPINC . '/load.php' );
     20require( ABSPATH . WPINC . '/class-wp-fatal-error-handler.php' );
     21require( ABSPATH . WPINC . '/error-protection.php' );
    2022require( ABSPATH . WPINC . '/default-constants.php' );
    2123require_once( ABSPATH . WPINC . '/plugin.php' );
     25// Make sure we register the shutdown handler for fatal errors as soon as possible.
    529534 */
    530535do_action( 'wp_loaded' );
     538 * Store the fact that we could successfully execute the entire WordPress
     539 * lifecycle. This is used to skip the premature shutdown handler, as it cannot
     540 * be unregistered.
     541 */
     542if ( ! defined( 'WP_EXECUTION_SUCCEEDED' ) ) {
     543    define( 'WP_EXECUTION_SUCCEEDED', true );
Note: See TracChangeset for help on using the changeset viewer.