Отображение ошибок PHP из admin-ajax.php в WordPress 4.9+

У нас есть настроенные конечные точки, которые выполняют различные действия, к которым мы получаем доступ через /wp/wp-admin/admin-ajax.php?action=some_action

Однако всякий раз, когда в процессе разработки возникает ошибка, такая как синтаксис, логика, фатальная ошибка и т. Д., Мы просто получаем «500 Internal Server Error» при просмотре страницы в браузере.

Каждая другая страница на сайте, когда есть ошибка, дает нам ошибку PHP, чтобы помочь нам отладить.

Однако, когда ошибка исходит от admin-ajax.php область, мы должны затем открыть наш файл журнала PHP, чтобы увидеть ошибку вместо этого — что больше боли при активной разработке

Есть ли что-то в WordPress, что отключает отображение ошибок в этом пространстве имен URL? и если да, то как мы можем предотвратить это, чтобы разрешить отображение ошибок в браузере?

2

Решение

введите описание изображения здесьЕсли вы хотите увидеть ошибки PHP при использовании ajax, откройте файл wp-includes / load.php & в строке 336 измените эту строку:

if ( defined( 'XMLRPC_REQUEST' ) || defined( 'REST_REQUEST' ) || ( defined( 'WP_INSTALLING' ) && WP_INSTALLING ) || wp_doing_ajax() ) {
@ini_set( 'display_errors', 0 );
}

в

if ( defined( 'XMLRPC_REQUEST' ) || defined( 'REST_REQUEST' ) || ( defined( 'WP_INSTALLING' ) && WP_INSTALLING ) || wp_doing_ajax() ) {
@ini_set( 'display_errors', 1 );
}

Теперь вы сможете увидеть ошибки ajax в консоли браузера. Не забудьте отменить это, когда закончите отладку!

2

Другие решения

https://codex.wordpress.org/Debugging_in_WordPress

 // Enable WP_DEBUG mode
define( 'WP_DEBUG', true );

// Enable Debug logging to the /wp-content/debug.log file
define( 'WP_DEBUG_LOG', true );

// Disable display of errors and warnings
define( 'WP_DEBUG_DISPLAY', false );

Определите следующие константы как таковые. Вы сможете увидеть debug.log под wp-content, Я обычно тоже отключаю отображение отладки, потому что это вызывает проблему с уже отправленными заголовками.

РЕДАКТИРОВАТЬ:

Таким образом, по-видимому, отчеты об ошибках отключены для запросов AJAX в последней строке метода wp_debug_mode() в wp-includes/load.php

if ( defined( 'XMLRPC_REQUEST' ) || defined( 'REST_REQUEST' ) || ( defined( 'WP_INSTALLING' ) && WP_INSTALLING ) || wp_doing_ajax() ) {
@ini_set( 'display_errors', 0 );
}
0

По вопросам рекламы [email protected]