Wer Kunden-Websites betreut, kennt das sicher: Ein Update, eine PHP-Aktualisierung oder irgendein Code-Snippet verursacht einen fatalen Fehler und WordPress informiert dich darüber, dass eine Mail an den Administrator gegangen ist. Nur gibt es jetzt ein Problem: Der Kunde selbst ist dort mit seiner E-Mail-Adresse eingetragen. Im noch schlimmeren Fall ein Dienstleister, den es gar nicht mehr gibt. Was nun?
Es gibt verschiedene Auswege aus diesem Dilemma. Eine Variante ist es, jetzt den Fatal Error Handler in der wp-config.php
zu deaktivieren:
define( 'WP_DISABLE_FATAL_ERROR_HANDLER', true );
So kommen wir der Sache zwar näher, aber standardmäßig ist der Debug-Modus ja noch deaktiviert und da wir den Fehler auch nicht öffentlich machen wollen, sollten wir das Ganze lieber in die debug.log
-Datei speichern, also Debug-Modus anschalten, die Anzeige der Fehler aber ausschalten und das Logging dafür aktivieren (alles ebenfalls in der wp-config.php
):
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_DISPLAY', false );
define( 'WP_DEBUG_LOG', true );
Jetzt sollte in den /wp-content
-Ordner eine debug.log
-Datei geschrieben werden, wenn wir den Fehler wieder auslösen. Puh, das ist ziemlich umständlich …
Aber es gibt noch einen besseren, aber schlecht dokumentierten, anderen Weg, das Problem zu lösen: Neben dem Deaktivieren des Fatal Error Handlers, kann auch die E-Mail-Adresse nur für diese Mail angepasst werden. Dazu gibt es eine Konstante und einen gleichnamigen Filter, um das zu erreichen. Leider habe ich dazu nur spärlich Informationen gefunden. Im Ankündigungsartikel zum Feature wird der Filter und die Konstante nur in den Kommentaren erwähnt.
Einfach via Konstante in der wp-config.php
:
define( 'RECOVERY_MODE_EMAIL', 'email@example.com' );
Oder via recovery_mode_email-Filter in einem mu-plugin
zum Beispiel:
add_filter(
'recovery_mode_email', function( $email_data ) {
$email_data['to'] = 'email@example.com';
return $email_data;
}
);
Erstaunlicherweise gibt es dazu keinen Hinweis im Advanced-Administration-Handbuch. Daher ist das Wissen um diese Möglichkeit auch kaum verbreitet.
Wer dafür lieber ein User Interface hätte, für den gibt es dieses praktische Plugin, mit dem sich die E-Mail und ein paar Kleinigkeiten mehr direkt in WordPress anpassen lassen. Das funktioniert natürlich nur im Vorhinein. Ist der Fehler erst einmal passiert, dann ist der Weg über den FTP und per Filter oder Konstante natürlich der einzige Weg.
Ich finde, das ist ein guter Weg, um die Admin-Adresse (aus Einstellungen -> Allgemein) besser aufzuteilen in Benachrichtigungen an den inhaltlichen Betreiber (den Kunden/die Kundin) und den technischen Betreiber (z.B. eben mich als Dienstleister für die Wartung).
Aber bedauerlicherweise ist ein größeres Problem immer noch vorhanden: Beide E-Mail-Adressen sind unabhängig von real existierenden Benutzerkonten. Wenn ich als Benutzer gelöscht werde, dann steht meine E-Mail-Adresse immer noch unter Einstellungen -> Allgemein (oder dann eben noch zusätzlich für den Fatal Error Handler) in den Einstellungen und ich habe keine Möglichkeit, sie dort ohne fremde Hilfe wieder zu löschen.
Klüger wäre ein System, was die diversen Mails, die WordPress versendet, an verschiedene Benutzer zuweisen lässt. So könnten „Personal Data Requests“ an den Datenschutzbeauftragten gehen, Kommentarbenachrichtungen an die Redaktion oder das Marketing-Team und der „Fatal Error Handler“ eben an den Administrator.
Was denkt ihr darüber? Ist so eine extra Mail-Einstellung für den technischen Dienstleister sinnvoll? Oder denkt ihr, dass das am Ende womöglich nur vergessen wird? Wie löst ihr das Problem? Lieber via Debug-Modus, wie eingangs beschrieben? Und kanntet ihr den Filter/die Konstante schon vorher? Ich freue mich über eure Einschätzungen in den Kommentaren!
Ein wichtiges Thema! Und genau dazu wollte ich auch einen Beitrag schreiben, aber danke, dass du es schon übernommen hast 😀
Das ist wirklich so einer der Bereiche, die nicht wirklich gut dokumentiert und bei nur wenigen bekannt sind.
Das Reporting von WordPress ist eine einzige Katastrophe. Was es aus meiner Sicht braucht (und ich auch seit Jahren nicht müde werde zu predigen):
– Einstellmöglichkeiten wo Fehler/Benachrichtigungen/Infos angezeigt werden. Dazu gehören
* das Backend (die admin notices, die oft genug für’s Sparen, sorry Upselling missbraucht werden)
* eMails, gerne granular mit mehreren Adressen die gemeinsam oder für einzelne Dinge getriggert werden
* Messaging Dienste, die üblichen Verdächtigen: SMS/Signal/WA/Telegram/…
* syslog (was vorallem hübsch wird, wenn man mehrere Instanzen dort zusammenführt und z.B. Angriffsszenarien besser und einfacher identifizieren kann)
– Einstellmöglichkeiten was angezeigt werden soll. Die üblichen Log-Levels: info/warn/error/fatal/debug
Eigentlich gut geübte Praxis in vielen anderen FOSS Projekten. Nur WP ist mal wieder anders.
Spannende Konstante. Kannte ich noch nicht.
Im Regelfall bin ich als Admin-E-Mail-Adresse hinterlegt und bekomme, somit die E-Mails. Wenn Kunden keinen Wartungsvertrag abschließen wollen, kommen sie in die Einstellung und bekommen dann die Fehlermeldungen.