Mostrando Errores PHP desde admin-ajax.php
Tenemos algunos endpoints personalizados configurados que realizan varias tareas, a los que accedemos a través de /wp/wp-admin/admin-ajax.php?action=some_action
Sin embargo, cuando hay un error durante el desarrollo, como errores de sintaxis, lógicos, fatales, etc., simplemente obtenemos "500 Internal Server Error"
En todas las demás páginas del sitio cuando hay un error, nos muestra el error PHP.
Tenemos que abrir nuestro archivo de registro PHP para ver el error.
¿Hay algo en WordPress que desactive la visualización de errores en estas URLs? y si es así, ¿cómo podemos evitar esto para permitir mostrar los errores en el navegador?
WordPress por defecto oculta los errores para las llamadas de solicitud ajax. Esto puede confirmarse en el archivo fuente wp-includes/load.php#L352
, aquí:
if ( defined( 'XMLRPC_REQUEST' ) || defined( 'REST_REQUEST' ) || ( defined( 'WP_INSTALLING' ) && WP_INSTALLING ) || wp_doing_ajax() ) {
@ini_set( 'display_errors', 0 );
}
Observa que la función wp_doing_ajax()
se está utilizando en la declaración condicional, por lo que display_errors
está siendo configurado.
Para solucionar esto, necesitas activar manualmente el reporte de errores al inicio de tu llamada de función ajax, como sugiere @Friss.

¡¡¡MUCHAS GRACIAS!!! Sé que obviamente nunca querrás hackear el núcleo, pero solo en un entorno local y con fines de solución de problemas, cuando el ajax es llamado por un plugin con el que no quieres meterte o no tienes tiempo para averiguar - comentar temporalmente la línea mencionada anteriormente en /wp-includes/load.php permitirá la salida de mensajes de error más específicos y te permitirá rastrear de dónde proviene el problema.

Hay un filtro en la parte superior de load.php
que lo omite:
add_filter( 'enable_wp_debug_mode_checks', '__return_false' );

@Cragmonkey Por favor explica cómo se podría usar ese hook en su llamada ajax.

@Rahil Wazir ... Deberías crear temporalmente ese hook en otra parte de tu plugin mientras depuras.

Hola, esto sí activa el reporte de errores - sin embargo, estamos intentando específicamente averiguar POR QUÉ se desactiva para el admin-ajax.php
ya que si lo configuramos al final del wp-config por ejemplo, se sobrescribe en algún lugar para las llamadas ajax

Puedes probar con WP_Ajax_Response
$response = array(
'what'=>'stuff',
'action'=>'delete_something',
'id'=>new WP_Error('oops','Tuve un accidente.'),
'data'=>'¡Ups, hubo un problema!'
);
$xmlResponse = new WP_Ajax_Response($response);
$xmlResponse->send();
Lee más https://codex.wordpress.org/Function_Reference/WP_Ajax_Response
