WordPress Ajax Debugging via FTP

Er zijn meerdere manieren binnen WordPress om je code te debuggen. Één van de meest populaire manieren is natuurlijk via jouw Controlepaneel, hier kan je namelijk de PHP Errorlog inzien.

Soms is dit niet van toepassing als je alleen maar toegang krijgt tot de FTP. Hiervoor bestaan nog meer variaties op de errorlogging.

1. Errorlogging naar bestand

Om alle errors te loggen naar een bestand die via FTP downloadbaar is voegen we onderstaande code toe aan de wp-config.php. Hierna worden alle errors in de root opgeslagen in het bestand ‘php-errors.log’

@ini_set('log_errors','On');
@ini_set('display_errors','Off');
@ini_set('error_log','php-errors.log');

2. Ajax Errorlogging

Een hele leuke functie aan WordPress is, is dat de Ajax calls niet gelogd worden in de PHP-errors.log. Dit is hele jammer natuurlijk want hier zitten ook wel eens bugs in. (Vooral na een migratie naar PHP 8.x en hoger)

Om deze errors in te kunnen zien maken we gebruik van een kleine hack in de WordPress Core.

Stap 1: Voeg de JSON error toe aan de Error Output

Open allereerst het onderstaande bestand

/wp-includes/class-wp-fatal-error-handler.php

En ga naar Regel 199 (In latere/eerdere versies van WordPress kan dit anders zijn) Hier moeten we onderstaande code aantreffen.

    $message = sprintf(
        '<p>%s</p><p><a href="%s">%s</a></p>',
        $message,
        /* translators: Documentation about troubleshooting. */
        __( 'https://wordpress.org/documentation/article/faq-troubleshooting/' ),
        __( 'Learn more about troubleshooting WordPress.' )
    );

Verander hier $message, naar onderstaande.

$message . ' ' . json_encode($error),

Met deze aanpassing wordt nu in de ajax response ook de daadwerkelijke foutmelding toegevoegd.

Stap 2: Bekijk Error Output in de Network Tab

Na het toevoegen van deze code kunnen we in Google Chrome (Of je andere favoriete browser) naar de DevTools gaan. In de DevTools gaan we naar het tabblad “Network”.

Hier zie je een lijst met alle interactie naar de server. Maar wat voor ons van belang is, is natuurlijk de error van “admin-ajax.php”

Klik hier op “Admin-ajax.php” en ga in het rechtermenu naar “Response”

Op deze manier kan je snel en makkelijk de foutmelding vinden!

Vergeet niet om alles terug te draaien als je klaar bent met het oplossen van het probleem!