Як відключити захист від фатальної помилки (WSOD)?


12

Фатальна помилка була введена в WordPress 5.1 та 5.2.

Іноді його називають захистом "Білого екрану смерті" (WSOD).

Працюючи над встановленнями dev / local, ми іноді хочемо мати можливість поламати сайти за потребою, наприклад, уникаємо процесу відновлення електронної пошти для сайту під час роботи в захищеній кінцевій точці (див. is_protected_endpoint()):

На сайті виникають технічні труднощі. Перевірте вказівки електронної пошти адміністратора вашого веб-сайту, щоб отримати інструкції.

Як ми можемо відключити смертельну помилку?

Відповіді:


15

Ми можемо змінювати виведення функції boolwp_is_fatal_error_handler_enabled() двома способами:

Постійний

Встановіть WP_DISABLE_FATAL_ERROR_HANDLERконстанту в trueмежах wp-config.phpфайлу:

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

або

define( 'WP_DISABLE_FATAL_ERROR_HANDLER', true );

Фільтр

Використовуйте wp_fatal_error_handler_enabledфільтр bool:

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

Примітки

Дивіться квиток № 44458

wp_fatal_error_handler_enabledФільтр буде перекривати значення WP_DISABLE_FATAL_ERROR_HANDLERконстанти.

Також слідкуйте за можливою плутаниною булів із постійним вимкненням, але фільтр дозволяє .

У моєму тестуванні підхід до фільтру як плагін, який потрібно використовувати , не працює, як очікувалося, тому я використовую константу замість цього. Сподіваюся, я можу розглянути це далі.

Можна також додати призначену для користувача розкривається в файлі fatal-error-handler.phpв wp-contentкаталог ( Src ), щоб перевизначити WP_Fatal_Error_Handlerклас по мірі необхідності. Ми повинні використовувати інше ім’я класу, і він повинен визначати handle()метод як зареєстровану функцію відключення .

Простим прикладом відключити його буде переосмислення класу обробника помилок за замовчуванням на спеціальний, який нічого не робить:

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

Анонімний клас PHP 7+, здається, працює також:

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

Він також може розширити WP_Fatal_Error_Handlerклас за замовчуванням, якщо це необхідно.

Тоді є WP_SANDBOX_SCRAPINGконстанта. Див. # 46045

Встановлення WP_DEBUGяк істинне не відключить захист WSOD. Це за дизайном. Див. # 46825

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.