23.2. Errorhandling

Es gibt eine interessante Klasse in WordPress: WP_Error-Objekte sind aufgebaut wie Exceptions in PHP können aber nicht mit einem catch-Block gefangen werden. Sie wurde dazu entworfen, um die Fehlerbehanldung in Plugins und WordPress einfacher zu machen1.

Fehler erzeugen

Sehen wir uns an, wie der Konstruktor der Klasse aufgebaut ist:

<?php
public function __construct( $code = '', $message = '', $data = '' ) {
	...
}
?>

Es gilt:

  • $code (int|string)
    Ein Fehlercode, in der Regel eine Zeichenkette (slug).
  • $message (string)
    Die Fehlermeldung in menschlicher Sprache.
  • $data (mixed)
    Weitere Fehlerdaten.

Beispiel:

Nehmen wir an, wir haben folgende Funktion in eines unserer Plugins eingebaut:

You’re not allowed to see this content. Please log in first.

Wie man sieht, versuchen wir valides JSON-Format zu erhalten. Ist das nicht der Fall, gibt die Funktion ein WP_Error-Objekt zurück. Diese könnte man dann weiterverarbeiten. Dazu gibt es in der Klasse einige Methoden, die dabei unterstützen können:

Fehler verarbeiten

Nehmen wir an, wir laden Profildaten von Instagram. Das ist seit Mitte 2018 nicht mehr möglich ohne eingeloggt zu sein. Das heißt, wir können damit rechnen, dass wir einen Fehler erhalten. Wir ergänzen den obigen Code mit folgenden Zeilen:

You’re not allowed to see this content. Please log in first.

Wie man sieht, prüfen wir mittels is_wp_error() ob wir einen Fehler erhalten haben oder nicht. Über die Methode get_error_code() lassen wir uns den letzten Code ausgeben und können dann entsprechend reagieren. Hier wird zum Beispiel ausgegeben, dass Instagram womöglich gerade nicht erreichbar ist.

Auf diese Art und Weise kann man auf Fehler des Programs reagieren ohne den Ablauf zu stören.

Hier alle Methoden aus der Klasse:

get_error_codes() : (array)

Liefert alle Fehlercodes in einem Array zurück.

get_error_code() : (int|string)

Liefert den ersten Fehlercode zurück.

get_error_messages( (string|int) $code ) : (array)
Liefert alle, für Menschen lesbare, Fehlermeldungen in einem Array.

get_error_message( (string|int) $code ) : (string)

Liefert die erste, für Menschen lesbare, Fehlermeldung zurück.

get_error_data( (string|int) $code ) : (mixed)
Liefert die Fehlerdaten zurück, falls welche hinterlegt wurden (siehe obiges Beispiel).

add( (string|int) $code, (string) $message, (mixed) $data = '' )
Hängt eine weitere Fehlermeldung an das Objekt (siehe auch die eingangs beschriebene Funktion des Konstruktors).

add_data( (mixed) $data, (int|string) $code = '' )
Hängt weitere Daten an das Fehlerobjekt an.

remove( (int|string) $code )
Entfernt eine Fehlermeldung.

Wichtig in diesem Zusammenhang auch:

is_wp_error( (mixed) $thing ) : (bool)

Gibt true oder false zurück.

  1. WP_Error Class Reference: Zugegriffen am 24. Mai 2018; https://codex.wordpress.org/Class_Reference/WP_Error ↩︎