Übergeben von Fehler- / Warnmeldungen aus einer Meta-Box an "admin_notices"
2 Antworten
- Stimmen
-
- 2011-04-21
Sie können dies von Handtun,aber WPmachtesnativ wiefolgtfür Einstellungsfehler:
-
add_settings_error()
zum Erstelleneiner Nachricht. - Dann
set_transient('settings_errors', get_settings_errors(), 30);
-
settings_errors()
inadmin_notices
wird angezeigt (mussfür Bildschirme ohne Einstellungen angehängt werden).
You can do this by hand, but WP natively does it like this for settings errors:
add_settings_error()
to create message.- Then
set_transient('settings_errors', get_settings_errors(), 30);
settings_errors()
inadmin_notices
hook to display (will need to hook for non-settings screens).
-
esmacht wasich will,aber würde dasnicht die Datenbankmit Tonnen von Transientenfüllen?it does what I want, but wouldn't this fill the database with tons of transients?
- 0
- 2011-04-22
- onetrickpony
-
@One Trick Ponyim nativen Prozesstransient wirdexplizitgelöscht (siehe `get_settings_errors ()` source).Möglicherweisemüssen Sie dies selbsttun,wenn Sie die Logikfür die Seite ohne Einstellungen anpassen.@One Trick Pony in native process transient is explicitly deleted (see `get_settings_errors()` source) . You might need to do that yourself if adapting logic for non-settings page.
- 0
- 2011-04-22
- Rarst
-
Trotzdemgefälltmir die Idee,temporäre Fehlermeldungenin der Datenbank zu speichern,nicht.Ich werde Ajax verwenden,um den Benutzerbei Eingabeänderungen zu warnenstill I don't like the idea of storing temporary error messages in the db. I'll use ajax to warn the user on input change
- 2
- 2011-04-22
- onetrickpony
-
Mit dem Zwischenspeichern von Objekten wäre Datenbank-Unordnung kein Problem.With object caching, database clutter wouldn't be a problem.
- 0
- 2017-10-03
- lkraav
-
- 2012-05-14
Diese Antwort [< a href="http://web.archive.org/web/20100323052629/http://www.wptavern.com/forum/plugins-hacks/1387-add_meta_box-how-display-errors.html">mirror ] von Ottoin WP Tavern löst das vorübergehende Problemtatsächlich,indemes dastut,was WordPress selbsttut,um das Umleitungsproblem zu überwinden. Totalfürmichgearbeitet.
Das Problemist,dass Transientenfür alle da sind. Wennmehr alsein Benutzergleichzeitig Dingetut,kann die Fehlermeldung an diefalsche Persongehen. Esisteine Rennbedingung.
WordPresstut diestatsächlich,indemeseinen Nachrichtenparameterin der übergibt URL. Die Nachrichtennummergibt an,welche Nachricht angezeigt werden soll.
Sie können dasselbetun,indem Sie den Filter
redirect_post_location
undeinbinden Verwenden Sie dannadd_query_arg
,um der Anforderung Ihreneigenen Parameter hinzuzufügen. Wie so:add_filter('redirect_post_location','my_message'); function my_message($loc) { return add_query_arg( 'my_message', 123, $loc ); }
Diesfügt der Abfrage
my_message=123
hinzu. Nach der Umleitung können Sie dann die Einstellungmy_messageim$_GET
erkennen und die richtige Nachrichtentsprechend anzeigen.This answer [mirror] from Otto in WP Tavern, actually solves the transient problem by doing what WordPress itself does to overcome the redirect problem. Totally worked for me.
The problem is that transients are there for everybody. If you have more than one user doing things at the same time, the error message can go to the wrong person. It's a race condition.
WordPress actually does this by passing a message parameter in the URL. The message number indicates which message to display.
You can do the same by hooking the
redirect_post_location
filter and then usingadd_query_arg
to add your own parameter to the request. Like so:add_filter('redirect_post_location','my_message'); function my_message($loc) { return add_query_arg( 'my_message', 123, $loc ); }
This adds
my_message=123
to the query. Then, after the redirect, you can detect the my_message setting in the$_GET
and display the proper message accordingly.
Ich habeeine einfache Meta-Box,die diebenutzerdefinierten Post-Felder aktualisiert (mithilfe von
update_post_meta()
).Wie kannicheine Fehler- oder Warnmeldung an dienächste Seite senden,nachdem der Benutzer den Beitrag veröffentlicht/aktualisiert und keines der Meta-Box-Felder ausgefüllt (odermit ungültigen Datengefüllt) hat?