致命的なエラー(WSOD)保護を無効にする方法は?


12

致命的なエラー処理は、WordPress 5.1および5.2で導入されました。

ホワイトスクリーンオブデス(WSOD)保護と呼ばれることもあります。

開発/ローカルインストールで作業する場合、必要に応じてサイトを破壊できるようにしたい場合があります。たとえば、保護されたエンドポイント内で作業している場合は、サイトのメール回復プロセスを回避します(を参照is_protected_endpoint())。

サイトで技術的な問題が発生しています。手順については、サイト管理者のメール受信トレイを確認してください。

どうすれば致命的なエラー処理を無効にできますか?

回答:


15

関数のブール出力をwp_is_fatal_error_handler_enabled()2つの方法で変更できます。

絶え間ない

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_enabledboolフィルターを使用します。

/**
 * 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.phpwp-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をtrueに設定しても、WSOD保護無効になりません。これは仕様によるものです。#46825を参照

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.