¿Cómo deshabilitar la protección de error fatal (WSOD)?

12

El manejo de errores fatales se introdujo en WordPress 5.1 y 5.2.

A veces se conoce como la protección de la Pantalla Blanca de la Muerte (WSOD).

Cuando trabajamos en instalaciones de desarrollo / locales, a veces queremos poder romper los sitios según sea necesario y, por ejemplo, evitar el proceso de recuperación de correo electrónico para el sitio cuando se trabaja dentro de un punto final protegido (ver is_protected_endpoint()):

El sitio está experimentando dificultades técnicas. Verifique la bandeja de entrada de correo electrónico del administrador de su sitio para obtener instrucciones.

¿Cómo podemos desactivar el manejo de errores fatales?

Birgire
fuente

Respuestas:

15

Podemos modificar la salida bool de la wp_is_fatal_error_handler_enabled()función de dos maneras:

Constante

Establezca la WP_DISABLE_FATAL_ERROR_HANDLERconstante truedentro del wp-config.phparchivo:

/**
 * Disable the fatal error handler.
 */
const WP_DISABLE_FATAL_ERROR_HANDLER = true; 

o

define( 'WP_DISABLE_FATAL_ERROR_HANDLER', true );

Filtrar

Usar wp_fatal_error_handler_enabledfiltro de bool:

/**
 * Disable the fatal error handler.
 */
add_filter( 'wp_fatal_error_handler_enabled', '__return_false' );

Notas

Ver boleto # 44458

El wp_fatal_error_handler_enabledfiltro anulará el valor de la WP_DISABLE_FATAL_ERROR_HANDLERconstante.

También tenga cuidado con una posible confusión de bool con la desactivación constante pero la habilitación del filtro .

En mis pruebas, el enfoque de filtro, como complemento obligatorio , no funciona como se esperaba, por lo que estoy usando la constante. Espero poder investigar esto más a fondo.

También se puede añadir una costumbre drop-in de archivos fatal-error-handler.phpen el wp-contentdirectorio ( src ), para anular la WP_Fatal_Error_Handlerclase según sea necesario. Debemos usar un nombre de clase diferente y debe definir el handle()método como la función de apagado registrada .

Un ejemplo simple para deshabilitarlo sería anular la clase predeterminada del controlador de errores con una personalizada que no haga nada:

<?php
class WPSE_Fatal_Error_Handler {
    public function handle() {}
}
return new WPSE_Fatal_Error_Handler;

La clase anónima en PHP 7+ parece funcionar también:

<?php
return new Class(){
    public function handle() {}
};

También podría extender la WP_Fatal_Error_Handlerclase predeterminada si es necesario.

Luego está la WP_SANDBOX_SCRAPINGconstante. Ver # 46045

Establecer WP_DEBUGcomo verdadero no deshabilitará la protección de WSOD. Esto es por diseño. Ver # 46825

Birgire
fuente