Итак, я нашел скрипт, где Wordpress обрабатывает фатальные ошибки и где он маскирует эти ошибки под общим сообщением:
Сайт испытывает технические трудности. Пожалуйста, проверьте свою электронную почту для получения инструкций.
Сценарий /wp-includes/class-wp-fatal-error-handler.php
обрабатывает эти ошибки в блоке try..catch
, что делает невозможным отображение сообщения об ошибке.
Таким образом, временное решение, только для отладки, состоит в том, чтобы изменить метод handle()
, чтобы отключить try..catch
и зарегистрировать сообщение об ошибке, как показано здесь:
отказ от ответственности: эта модификациядолжен быть отменен после того, как сайт запущен в производство, это только для целей отладки.
public function handle() {
if ( defined( 'WP_SANDBOX_SCRAPING' ) && WP_SANDBOX_SCRAPING ) {
return;
}
// comment try..catch
// try {
// Bail if no error found.
$error = $this->detect_error();
if ( ! $error ) {
return;
}
//log error message
error_log($error["message"]);
return;
if ( ! isset( $GLOBALS['wp_locale'] ) && function_exists( 'load_default_textdomain' ) ) {
load_default_textdomain();
}
if ( ! is_multisite() && wp_recovery_mode()->is_initialized() ) {
wp_recovery_mode()->handle_error( $error );
}
// Display the PHP error template if headers not sent.
if ( is_admin() || ! headers_sent() ) {
$this->display_error_template( $error );
}
// } catch ( Exception $e ) {
// Catch exceptions and remain silent.
// }
}
Функция error_log
будет регистрировать ошибку до wp-content/debug.log
в случае, если эта строка существует в вашем wp-config.php
file:
define( 'WP_DEBUG_LOG', true );
Или в журнал ошибок Apache / php в противном случае.
Конечно, есть другие способы и другие конфигурации для отладки этих ошибок, но это легко.