Afișarea erorilor PHP din admin-ajax.php
Avem câteva endpoint-uri personalizate configurate care fac diverse lucruri, pe care le accesăm prin /wp/wp-admin/admin-ajax.php?action=some_action
Cu toate acestea, ori de câte ori apare o eroare în timpul dezvoltării, cum ar fi erori de sintaxă, logice, fatale etc., primim doar "500 Internal Server Error"
Pe toate celelalte pagini ale site-ului, când apare o eroare, ni se afișează eroarea PHP.
Trebuie să deschidem fișierul PHP Log pentru a vedea eroarea.
Există ceva în WordPress care dezactivează afișarea erorilor pe aceste URL-uri? și dacă da, cum putem preveni acest lucru pentru a permite afișarea erorilor în browser?
WordPress, în mod implicit, ascunde erorile pentru cererile AJAX. Acest lucru poate fi confirmat din fișierul sursă wp-includes/load.php#L352
, aici:
if ( defined( 'XMLRPC_REQUEST' ) || defined( 'REST_REQUEST' ) || ( defined( 'WP_INSTALLING' ) && WP_INSTALLING ) || wp_doing_ajax() ) {
@ini_set( 'display_errors', 0 );
}
Observați că funcția wp_doing_ajax()
este utilizată în instrucțiunea condițională, astfel încât display_errors
este setat.
Pentru a ocoli această limitare, trebuie să activați raportarea erorilor manual în partea superioară a funcției AJAX, așa cum a sugerat @Friss.

MULȚUMESC!!! Este clar că nu vrem să modificăm nucleul, dar într-un mediu local, doar în scopul depanării, când apelul ajax este făcut de un plugin cu care nu doriți să vă interferezi sau nu aveți timp să analizați - comentarea temporară a liniei menționate mai sus în /wp-includes/load.php va permite afișarea unor mesaje de eroare mai specifice și vă va ajuta să identificați sursa problemei.

Există un filtru în partea de sus a load.php
care ocoleste această verificare:
add_filter( 'enable_wp_debug_mode_checks', '__return_false' );

@Cragmonkey Te rog să explici cum s-ar putea folosi acest hook în apelul ajax.

@Rahil Wazir ... Ai putea crea temporar acel hook în altă parte din plugin-ul tău în timpul depanării.

Bună, Aceasta activează raportarea erorilor - totuși, încercăm să aflăm de ce este dezactivată pentru admin-ajax.php
, deoarece dacă o setăm în partea de jos a wp-config de exemplu, este suprascrisă undeva pentru apelurile ajax

Puteți încerca să utilizați WP_Ajax_Response
$response = array(
'what'=>'stuff',
'action'=>'delete_something',
'id'=>new WP_Error('oops','Am avut un accident.'),
'data'=>'Hopa, a apărut o problemă!'
);
$xmlResponse = new WP_Ajax_Response($response);
$xmlResponse->send();
Citiți mai multe https://codex.wordpress.org/Function_Reference/WP_Ajax_Response
