Passaggio di messaggi di errore / avviso da un meta box a "admin_notices"
2 risposta
- voti
-
- 2011-04-21
Puoifarlo amano,ma WPin modonativo lofain questomodoperglierrori diimpostazione:
-
add_settings_error()
per creareilmessaggio. - Quindi
set_transient('settings_errors', get_settings_errors(), 30);
-
settings_errors()
inadmin_notices
hookto display (dovrà agganciarsiper schermatenon diimpostazioni).
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).
-
fa quello che voglio,ma questonon riempirebbeil database contonnellate ditransitori?it does what I want, but wouldn't this fill the database with tons of transients?
- 0
- 2011-04-22
- onetrickpony
-
@One Trick Ponynelprocessonativotransient èesplicitamente cancellato (vedere `get_settings_errors ()` source).Potrebbeesserenecessariofarlo da soli se si adegua la logicaper lapaginanon delleimpostazioni.@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
-
ancoranonmi piace l'idea dimemorizzaremessaggi dierroretemporaneinel db.Userò ajaxper avvisare l'utente dellamodifica dell'inputstill 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
-
Conil caching degli oggetti,la confusione del databasenon sarebbe unproblema.With object caching, database clutter wouldn't be a problem.
- 0
- 2017-10-03
- lkraav
-
- 2012-05-14
Questa risposta [< a href="http://web.archive.org/web/20100323052629/http://www.wptavern.com/forum/plugins-hacks/1387-add_meta_box-how-display-errors.html">mirror ] di Ottoin WP Tavern,risolveeffettivamenteilproblematemporaneofacendo ciò che WordPress stessofaper superareilproblema del reindirizzamento. Hafunzionatototalmenteperme.
Ilproblema è chei transitori ci sonopertutti. Sepiù utentieseguono operazioni contemporaneamente,ilmessaggio dierrorepuò andare allapersona sbagliata. È una condizione digara.
WordPress lofaeffettivamentepassando unparametro dimessaggionelfile URL. Ilnumero delmessaggioindica qualemessaggio visualizzare.
Puoifare lo stesso collegandoilfiltro
redirect_post_location
e quindi utilizzandoadd_query_arg
per aggiungereilproprioparametro alla richiesta. In questomodo:add_filter('redirect_post_location','my_message'); function my_message($loc) { return add_query_arg( 'my_message', 123, $loc ); }
Questo aggiunge
my_message=123
alla query. Quindi,dopoil reindirizzamento,puoi rilevare l'impostazionemy_messagein$_GET
e visualizzareilmessaggio corretto di conseguenza.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.
Ho una semplicemetabox che aggiornai campipersonalizzati delpost (utilizzando
update_post_meta()
).Comepossoinviare unmessaggio dierrore o di avviso allapagina successiva dopo che l'utente hapubblicato/aggiornatoilposte non ha riempito uno dei campi delmetabox (o li ha riempiti con datinon validi)?