So verhindern Sie, dass Admin-Hinweise WordPress überfluten

Sie öffnen den Adminbereich, um einen Tippfehler zu korrigieren. Noch bevor Sie die Seite erreichen, sind vier Meldungen schneller: Ein Backup-Plugin möchte, dass Sie verlängern, ein Formular-Plugin hätte gern fünf Sterne, ein SEO-Plugin hat einen Tipp, und ein Cache-Plugin hat seinen Cache geleert und fand, das sollten Sie wissen. Bis Sie an allen vorbeigescrollt sind, kann der Tippfehler auch warten.
Mit Hinweisen melden sich WordPress und die Plugins bei Ihnen, und einige verdienen das auch: ein fehlgeschlagenes Backup, ein Plugin, das nach einem fatalen Fehler pausiert wurde, eine Lizenz, die am Freitag ausläuft. Der Rest ist Werbung mit demselben farbigen Rand, an derselben Stelle, oben auf jedem Bildschirm.
Warum sich die Hinweise stapeln
WordPress löst weit oben auf jeder Adminseite einen Hook namens admin_notices aus. Jedes Plugin kann dort ausgeben, was es will, und WordPress nutzt denselben Hook für seine eigenen Meldungen, etwa das Banner für Core-Updates oder die Warnung vor Plugins, die der Wiederherstellungsmodus pausiert hat. Ein Limit setzt WordPress nicht, eine Rangfolge nach Wichtigkeit auch nicht.
Das kleine Kreuz hilft weniger, als man denkt. Bei einem schließbaren Hinweis fügt WordPress einen Schließen-Button hinzu, und dieser Button entfernt den Hinweis von der Seite, die Sie gerade vor sich haben. Sich Ihren Klick zu merken, ist Sache des Plugins. Viele Plugins tun das. Die anderen begrüßen Sie auf dem nächsten Bildschirm aufs Neue, als wäre nichts gewesen.
Zwei schnelle Lösungen, beide recht grob
Die erste ist eine CSS-Zeile, die jedes .notice ausblendet. Die zweite ist remove_all_actions( 'admin_notices' ), womit WordPress sie gar nicht erst ausgibt.
Beide räumen den oberen Bildschirmrand auf. Sie blenden aber auch die Warnung vor dem fehlgeschlagenen Backup von letzter Nacht aus, und davon erfahren Sie an dem Tag, an dem Sie genau dieses Backup brauchen.
Hinweise nur für Administratoren
Auf den Websites, die Sie ausliefern, gibt es einen fairen Kompromiss: Administratoren behalten alle Hinweise, alle anderen sehen keinen. Wer die Inhalte pflegt, kann mit einer Lizenzerinnerung nichts anfangen und könnte ohnehin nichts dagegen tun.
Speichern Sie diese Datei als wp-content/mu-plugins/quiet-admin-notices.php. WordPress lädt Must-Use-Plugins von selbst, und niemand kann sie auf dem Plugins-Bildschirm deaktivieren, was gut zu einer Hausregel wie dieser passt.
<?php
/**
* Plugin Name: Quiet admin notices
* Description: Only administrators see admin notices.
*/
add_action( 'in_admin_header', function () {
if ( current_user_can( 'manage_options' ) ) {
return;
}
remove_all_actions( 'admin_notices' );
remove_all_actions( 'all_admin_notices' );
remove_all_actions( 'user_admin_notices' );
remove_all_actions( 'network_admin_notices' );
}, PHP_INT_MAX );
Die Funktion läuft auf in_admin_header, also kurz bevor WordPress die Hinweise ausgibt und nachdem jedes Plugin seine eigenen angemeldet hat. Die vier Hooks decken den normalen Adminbereich, das Benutzer-Dashboard und die Netzwerkverwaltung einer Multisite ab. Ein Plugin, das seinen Hinweis per JavaScript einschleust, kommt trotzdem durch, denn es ist dem Hook nie zu nahe gekommen.
Einen Hinweis entfernen, den Sie beim Namen kennen
Manchmal muss ein einzelner Hinweis weg. Finden Sie zuerst heraus, wer ihn ausgibt. Dieses Snippet schreibt jede an admin_notices gehängte Funktion in Ihr Fehlerprotokoll (wp-content/debug.log, mit aktiviertem WP_DEBUG und WP_DEBUG_LOG):
add_action( 'admin_notices', function () {
global $wp_filter;
foreach ( $wp_filter['admin_notices']->callbacks as $priority => $callbacks ) {
foreach ( $callbacks as $callback ) {
$f = $callback['function'];
if ( is_array( $f ) ) {
$class = is_object( $f[0] ) ? get_class( $f[0] ) : $f[0];
$name = $class . '::' . $f[1];
} elseif ( is_string( $f ) ) {
$name = $f;
} else {
$name = 'a closure';
}
error_log( "admin_notices, priority $priority: $name" );
}
}
}, PHP_INT_MIN );
Entfernen Sie ihn dann über seinen Namen, mit der Priorität, mit der er hinzugefügt wurde. Bei falscher Priorität tut remove_action() nichts, und zwar kommentarlos.
add_action( 'in_admin_header', function () {
// A plain function, added with the default priority of 10.
remove_action( 'admin_notices', 'myplugin_renewal_notice' );
// A static method, added with priority 20.
remove_action( 'admin_notices', array( 'My_Plugin_Admin', 'review_request' ), 20 );
}, PHP_INT_MAX );
Dabei stoßen Sie an ein paar Grenzen. Ein Hinweis, den eine Objektmethode hinzufügt, lässt sich nur mit genau diesem Objekt entfernen, und Plugins rücken ihres selten heraus. Ein Hinweis aus einer anonymen Funktion lässt sich überhaupt nicht entfernen. Und wenn das Plugin seine Funktion bei einem Update umbenennt, ist der Hinweis zurück und Ihre Liste braucht eine Zeile mehr.
Stattdessen sammeln
Das Problem mit Hinweisen ist ihr Platz: oben auf jedem Bildschirm, alle auf einmal, ob Sie gerade Zeit haben oder nicht. Setzen Sie sie hinter einen Zähler. Sie sehen, dass etwas wartet, Sie öffnen die Liste, wann es Ihnen passt, und oben steht wieder die Seite, für die Sie gekommen sind. Eine Rückmeldung auf etwas, das Sie gerade getan haben, ist ein anderer Fall: Sie haben auf Speichern geklickt, also soll „Einstellungen gespeichert.“ weiterhin sofort erscheinen.
Die Hinweiszentrale in Refined Admin Dashboard
Refined Admin Dashboard, unser kostenloses Plugin, das den gesamten WordPress-Adminbereich neu zeichnet, geht genau so mit Hinweisen um, ohne dass Sie dafür eine Einstellung suchen müssen. Bei diesem Umzug werden keine Hinweise verletzt.
- Hinweise von WordPress und von Ihren Plugins landen in einem Zähler Benachrichtigungen oben rechts auf der Seite, auch die, die ein Plugin später per JavaScript hinzufügt.
- Das Plugin verschiebt jeden Hinweis und kopiert oder löscht nie einen. Jeder Hinweis behält seinen eigenen Schließen-Button, ein Plugin, das sich Ihren Klick merkt, tut das also weiterhin.
- Alle verwerfen drückt für Sie den Schließen-Button jedes Hinweises. Ein Hinweis ohne Schließen-Button bleibt in der Liste, bis sein Plugin ihn zurückzieht.
- Rückmeldungen auf das, was Sie gerade getan haben, etwa „Einstellungen gespeichert.“ oder ein Formularfehler, erscheinen zusätzlich als kurze Meldung, die wieder verschwindet.
- Hinweise, die in ein Formular gehören, bleiben dort.
Ein Wort an Plugin-Autoren
Wenn Sie Plugins schreiben, geben Sie Ihre Hinweise mit wp_admin_notice() aus (ab WordPress 6.4) statt mit handgeschriebenem Markup. Geben Sie jedem seinen echten Typ (error, warning, success oder info), machen Sie ihn schließbar und merken Sie sich, wenn er geschlossen wurde. Zeigen Sie ihn nur auf Ihren eigenen Bildschirmen, es sei denn, die ganze Website muss Bescheid wissen. Und bitte: Halten Sie das Rabattbanner aus der Beitragsliste heraus. Ihre Nutzer haben diesen Bildschirm geöffnet, um einen Beitrag zu schreiben.
Häufige Fragen
- Wie blende ich Admin-Hinweise in WordPress ohne Plugin aus?
- Legen Sie ein Must-Use-Plugin an, das vom Hook in_admin_header aus remove_all_actions() für admin_notices aufruft. Beschränken Sie es auf die Rollen, die mit Hinweisen ohnehin nichts anfangen können, damit Administratoren ein fehlgeschlagenes Backup oder ein pausiertes Plugin weiterhin sehen. Den Code finden Sie in diesem Artikel.
- Ist es sicher, alle Admin-Hinweise auszublenden?
- Nicht ganz. Fehler und Werbung teilen sich denselben Hook, also verschwinden ein fehlgeschlagenes Backup oder eine auslaufende Lizenz zusammen mit den Rabattbannern. Blenden Sie Hinweise für die Rollen aus, die nichts damit anfangen können, oder sammeln Sie sie an einem Ort.
- Warum tauchen weggeklickte Admin-Hinweise wieder auf?
- Der Schließen-Button, den WordPress hinzufügt, entfernt den Hinweis von der Seite, auf der Sie gerade sind, und mehr nicht. Ihren Klick muss sich das Plugin merken, das den Hinweis ausgegeben hat, und manche tun das nicht.
- Wie zeige ich Admin-Hinweise nur Administratoren an?
- Hängen Sie an in_admin_header eine Funktion, die bei Benutzern mit der Berechtigung manage_options sofort zurückkehrt und sonst remove_all_actions() für admin_notices, all_admin_notices, user_admin_notices und network_admin_notices aufruft. Das vollständige Snippet steht in diesem Artikel.
- Löscht Refined Admin Dashboard Admin-Hinweise?
- Nein. Es verschiebt jeden Hinweis in einen Zähler „Benachrichtigungen“, den Sie öffnen, wann Sie wollen, und jeder Hinweis behält seinen eigenen Schließen-Button.