Debugging in WordPress

Um das Debugging in WordPress zu aktivieren, muss zunächst die Datei wp-config.php angepasst werden. Dort gibt es folgende relevante Einstellungen:

// Debug-Modus aktivieren
define( 'WP_DEBUG', true ); 

// Logging in /wp-content/debug.log aktivieren
define( 'WP_DEBUG_LOG', true ); 

// Ausgabe von Fehlern und Warnungen deaktivieren
define( 'WP_DEBUG_DISPLAY', false );
@ini_set( 'display_errors', 0 );

// Bei Bedarf: DEV-Versionen von JS und CSS-Dateien nutzen
define( 'SCRIPT_DEBUG', true );

Anschließend kann mit mit error_log() Meldungen ausgeben, die dann nach /wp-content/debug.log geschrieben werden. Schwieriger wird es jedoch, wenn man nicht nur einfache Strings debuggen möchte, sondern beispielsweise Arrays oder Objekte. Hier hilft es, folgende Hilfsfunktion zu definieren:

if ( ! function_exists( 'write_log' ) ) {
    function write_log( $log ) {
        if ( is_array( $log ) || is_object( $log ) ) {
            error_log( print_r( $log, true ) );
        } else {
            error_log( $log );
        }
    }
}

Diese Funktion loggt einfache Werte (Strings, Integer, etc.) direkt, Objekte und Arrays werden vor der Ausgabe erst in lesbare Form umgewandelt.

Debugging mit Kint

Bei der Entwicklung eines eigenen Themes oder Plugins kann auch die Nutzung von Kint sinn machen. Kint ist ein PHP Debugging Tool, das aus einer .phar-Datei besteht. Diese Datei muss einfach eingebunden werden:

require 'kint.phar';

Anschließend stehen folgende Befehle zur Verfügung:

Kint::dump($GLOBALS, $_SERVER); // pass any number of parameters
d($GLOBALS, $_SERVER); // or simply use d() as a shorthand

Kint::trace(); // Debug backtrace
d(1); // Debug backtrace shorthand

s($GLOBALS); // Basic output mode

~d($GLOBALS); // Text only output mode

Kint::$enabled_mode = false; // Disable kint
d('Get off my lawn!'); // Debugs no longer have any effect

Der Vorteil bei der Nutzung von Kint liegt darin, dass gerade Objekte und Arrays in einer aufklappbaren Form angezeigt werden. So kann ich mich nach und nach zu meinem Ziel navigieren und werde nicht direkt von Informationen erschlagen.

Schreibe einen Kommentar