Passer des messages d'erreur / d'avertissement d'une méta-boîte à "admin_notices"
2 réponses
- votes
-
- 2011-04-21
Vouspouvez lefaire à lamain,mais WP lefaitnativement comme cecipour leserreurs deparamètres:
-
add_settings_error()
pour créer unmessage. - Puis
set_transient('settings_errors', get_settings_errors(), 30);
-
settings_errors()
dansadmin_notices
hook à afficher (devra accrocherpour les écrans sansparamètres).
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).
-
ilfait ce queje veux,mais celane remplirait-ilpas labase de données detonnes detransitoires?it does what I want, but wouldn't this fill the database with tons of transients?
- 0
- 2011-04-22
- onetrickpony
-
@One Trick Pony dans leprocessusnatiftransitoireestexplicitement supprimé (voir source `get_settings_errors ()`).Vous devrezpeut-être lefaire vous-même si vous adaptez la logique à lapage sansparamètres.@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
-
toujoursje n'aimepas l'idée de stocker desmessages d'erreurtemporaires dans labase de données.J'utiliserai ajaxpour avertir l'utilisateur du changement d'entréestill 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
-
Avec lamiseen cache d'objets,l'encombrement de labase de donnéesne seraitpas unproblème.With object caching, database clutter wouldn't be a problem.
- 0
- 2017-10-03
- lkraav
-
- 2012-05-14
Cette réponse [< a href="http://web.archive.org/web/20100323052629/http://www.wptavern.com/forum/plugins-hacks/1387-add_meta_box-how-display-errors.html">miroir ] d'Otto dans WP Tavern,résouten fait leproblèmetransitoireen faisant ce que WordPress lui-mêmefaitpour surmonter leproblème de redirection. Totalementtravaillépourmoi.
Leproblèmeest que lestransitoires sont làpourtout lemonde. Siplusieurs utilisateursfont des chosesen mêmetemps,lemessage d'erreurpeut êtreenvoyé à lamauvaisepersonne. C'est une condition de course.
WordPressfait celaen passant unparamètre demessage dans le URL. Lenuméro dumessageindique lemessage à afficher.
Vouspouvezfaire demêmeen accrochant lefiltre
redirect_post_location
et puisen utilisantadd_query_arg
pour ajouter votrepropreparamètre à la requête. Comme ça:add_filter('redirect_post_location','my_message'); function my_message($loc) { return add_query_arg( 'my_message', 123, $loc ); }
Cela ajoute
my_message=123
à la requête. Ensuite,après la redirection,vouspouvez détecter leparamètremy_message dans$_GET
et afficher lemessage appropriéen conséquence.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.
J'ai une simpleméta-boîte quimet àjour les champspersonnalisés depublication (en utilisant
update_post_meta()
).Commentpuis-jeenvoyer unmessage d'erreur ou d'avertissement à lapage suivante après que l'utilisateur apublié/mis àjour lemessageet ne remplitpas l'un des champs de laméta-boîte (ou les remplit avec des donnéesnon valides)?