Websupporter

Vor allem über WordPress.

Schöner sterben mit dem wp_die_handler

In letzter Zeit hatte ich ein wenig mit wp_die() zu tun. Diese Funktion lässt das Script sterben und gibt eine Fehlermeldung aus. Sie wird vor allem im Backend genutzt, um dort beispielsweise unbefugte Zugriffe auf Seiten abzuwürgen. Die Fehlermeldung wird dort in einem angemessenem Layout ausgegeben.

Doch auch im Frontend kommt wp_die() zum Einsatz, beispielsweise wenn man einen Kommentar abschickt, den man identisch schon einmal abgeschickt hat.

Die Standard wp_die() Ausgabe
Die Standard wp_die() Ausgabe

Was für das Backend noch ganz okay sein mag führt im Frontend doch eher zu Irritationen, denn das Layout passt nun einmal zu den wenigstens Themes. Das wp_die() überhaupt im Frontend zum Einsatz kommt mag ein wenig irritieren und ist auch eher eine alte Erbschaft, welche WordPress mit sich herumschleppt, die aber auch nicht so einfach aus dem Core zu entfernen ist.

Themedesigner müssen sich also überlegen, wie man sich hier einen kleinen Umweg bauen kann um schöner zu sterben. Und: Man kann schöner sterben, wie ein näherer Blick auf wp_die() zeigt, denn diese Funktion ruft zur Ausgabe und zum Sterben eine Callback-Funktion auf: _default_wp_die_handler(). Über den Filter wp_die_handler kann hier eine andere Callback-Funktion angegeben werden. Mit Hilfe eines kleinen Hacks können wir Fehlermeldungen von wp_die() also in unserem Layout präsentieren.

Die angepasste wp_die() Ausgabe
Die angepasste wp_die() Ausgabe

Sehen wir uns dazu kurz den Quelltext an, welchen ich der Einfachheit halber in ein Plugin gewrappt habe:

Embed from gist.github.com

Click the button below to load the content from gist.github.com.

Im Filter prüfen wir zunächst, ob wir uns eventuell im Admin befinden. In diesem Fall behalten wir die Standardausgabe, da diese sich eigentlich ganz gut in den WordPress Admin einfügt. Befinden wir uns allerdings im Frontend, möchen wir unsere Callback-Funktion einsetzen. Wie man sieht werden an die Callback-Funktion drei Parameter übergeben:

  • $message beinhaltet die Nachricht,
  • $title den Titel und
  • $args weitere Argumente, welche an wp_die() übergeben wurden.

In unserem Script nutzen wir nur die ersten beiden Parameter und agieren nun so, als würden wir eine Template-Datei schreiben. Wir geben mit get_header() den Seitenkopf aus, danach unseren Content, der im Wesentlichen die Fehlermeldung ausgibt und danach mit get_sidebar() die Sidebar und mit get_footer() den Footer. Dieses Script habe ich für Twentysixteen angepasst und natürlich müsste man es für andere Themes noch ein wenig anpassen.

Das Script hat zwar ein paar Macken (so gibt es die Adminbar derzeit nicht korrekt aus, wenn man eingeloggt ist) aber sie erfüllt ihren zentralen Zweck: Schöner zu sterben mit wp_die().

Über den Autoren

Seine erste Webseite hat David Remer 1998 in HTML verfasst. Wenig später war er fasziniert von DHTML und JavaScript. Nach jahrelanger Freelancerei arbeitete er zunächst für Inpsyde und ist heute Entwickler bei Automattic. Außerdem hat er das Buch "WordPress für Entwickler" verfasst.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.