Como desativar a proteção de erro fatal (WSOD)?

12

O tratamento de erros fatais foi introduzido no WordPress 5.1 e 5.2.

Às vezes, é chamada de proteção Tela Branca da Morte (WSOD).

Ao trabalhar em instalações dev / local, às vezes queremos poder quebrar os sites conforme necessário e, por exemplo, evitar o processo de recuperação de email do site ao trabalhar em um endpoint protegido (consulte is_protected_endpoint()):

O site está enfrentando dificuldades técnicas. Verifique a caixa de entrada de e-mail do administrador do site para obter instruções.

Como podemos desativar o tratamento de erros fatais?

Birgire
fonte

Respostas:

15

Podemos modificar a saída bool da wp_is_fatal_error_handler_enabled()função de duas maneiras:

Constante

Defina a WP_DISABLE_FATAL_ERROR_HANDLERconstante como truedentro do wp-config.phparquivo:

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

ou

define( 'WP_DISABLE_FATAL_ERROR_HANDLER', true );

Filtro

Use wp_fatal_error_handler_enabledfiltro bool:

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

Notas

Ver bilhete # 44458

O wp_fatal_error_handler_enabledfiltro substituirá o valor da WP_DISABLE_FATAL_ERROR_HANDLERconstante.

Também esteja atento a uma possível confusão booleana com a constante desativação, mas com o filtro ativado .

Nos meus testes, a abordagem de filtro, como um plug - in obrigatório , não está funcionando conforme o esperado, então estou usando a constante. Espero que eu possa analisar isso mais a fundo.

Também é possível adicionar um arquivo drop-in personalizado fatal-error-handler.phpao wp-contentdiretório ( src ), para substituir a WP_Fatal_Error_Handlerclasse conforme necessário. Devemos usar um nome de classe diferente e ele deve definir o handle()método como a função de desligamento registrada .

Um exemplo simples para desativá-lo seria substituir a classe do manipulador de erros padrão por uma classe personalizada que não faz nada:

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

A classe anônima no PHP 7+ parece funcionar também:

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

Também pode estender a WP_Fatal_Error_Handlerclasse padrão, se necessário.

Depois, há a WP_SANDBOX_SCRAPINGconstante. Veja # 46045

Definir WP_DEBUGcomo verdadeiro não desativará a proteção WSOD. Isso ocorre por design. Veja # 46825

Birgire
fonte