empêcher la soumission postérieure
1 réponses
- votes
-
- 2012-01-25
Voir le Codex,sur save_post . En réponse à la question 1,ilest déclenché chaquefois que WordPressenregistre automatiquement une révision (c'est-à-dire lorsqu'un articleest édité). Enparticulier,lors de la création d'unnouveaumessage,
wp-admin/post-new.php
est chargé. WordPress créeensuite unbrouillon automatiquemême si vousn'avezpasenregistré debrouillon oupubliépour lepublier. Ceciestprévu car cela signifie que des choses comme lestéléchargements demédiasfonctionnent correctement.Vousne devriezpasessayer de l'empêcher de s'exécuter ,maisplutôt vérifier dans votrefonction accrochée qu'ilne s'agitpas d'une routine de sauvegarde automatique:
add_action('save_post','my_save_function'); function my_save_function($post_id) { //You should have a nonce to check the data came from your metabox // verify this is not an auto save routine. if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) return; //Or: if (wp_is_post_revision( $post_id ) ) return; //perform authentication checks if (!current_user_can('edit_post', $post_id)) return; $raw_data = $_POST['name_of_input_field']; //Sanitise your data }
En réponse à Q2: renvoyerfalse dans lafonction ci-dessusn'empêchepas la sauvegarde dupost. Eneffet,WordPress déclenche simplement l'action 'save_post'maisne prenden compte aucun retour de celle-ci,et procède à la sauvegarde dumessage ( EDIT: Enfait,
save_post
est appelé après lemessageestinséré dans labase de données).Vous pourriez 'quitter' leprocessus,comme this answer ,mais si vous voulez vérifier que lametabox a été remplie,je suggère d'utiliserjQuery à laplace. Si vous souhaitez afficher unmessage d'erreur si votremétaboxn'apas été correctement renseignée, voir cemessage .
Jene saispaspourquoi vousposez la question Q3 - WordPressgère la désinfection de choses comme letitre avant de l'enregistrer dans labase de données - vousn'avezpas à vousen soucier. Ou souhaitez-vous utiliser letitre dans un champpersonnalisé?
Enbref,dumoment que vous utilisez quelque chose comme
update_post_meta
pourenregistrer les données dans labase de données,vousn'avezpasbesoin d'échapper aux données. Maisen ce qui concerne les vérifications àeffectuer avant cela,cela dépend de ce que vous êtesprêt àfaire,saufen tant qu'entrée de données. En sortie,vous devriez échapper des données -maisencore unefois,cela dépend du contexte. Voir cemessage.See the Codex, on save_post. In answer to Question 1, it is fired whenever WordPress auto_saves a revision (i.e. hence when a post is edited). In particular, when creating a new post,
wp-admin/post-new.php
is loaded. WordPress then creates an auto draft even if you haven't saved a draft or published to post. This is intended as it means stuff like the media uploads functions properly.You shouldn't try to prevent it from running, but instead, check in your hooked function that it is not an auto-save routine:
add_action('save_post','my_save_function'); function my_save_function($post_id) { //You should have a nonce to check the data came from your metabox // verify this is not an auto save routine. if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) return; //Or: if (wp_is_post_revision( $post_id ) ) return; //perform authentication checks if (!current_user_can('edit_post', $post_id)) return; $raw_data = $_POST['name_of_input_field']; //Sanitise your data }
In answer to Q2: returning false in the above function doesn't prevent the post saving. This is because WordPress just fires the action 'save_post' but does not consider any returns from it, and proceeds to save the post (EDIT: In fact,
save_post
is called after the post is inserted into the database).You could 'exit' the process, like this answer, but if you want to check the metabox has been filled in, I suggest using jQuery instead. If you wish to display an error notice if your metabox wasn't correctly filled in, see this post.
I'm not sure why you are asking Q3 - WordPress handles the sanitisation of stuff like the title before it saves it to the database - you don't have to worry about that. Or are you wanting to use the title in a custom field?
In short though, so long as you use something like
update_post_meta
to save data to the database, you don't need to escape the data. But with regards to which checks you should perform prior to that depends on what you are willing to except as the data input. On output you should be escaping data - but quite how again depends on context. See this post.-
Thxpour la réponse détaillée.commepour Q1,j'utilise déjà uneinstructionif pour échapper à la sauvegarde automatique,maispour une raison quelconque,elle se déclenchetoujours sur unnouveaumessage \edit.Q3: la raisonpour laquelleje voudraistraiter dutitreest que WPpermet à l'utilisateur de sauvegarder unmessage sanstitre,et jene veuxpas l'autoriser.Thx for the detailed answer. as for Q1, i'm already using an if statement to escape the auto-save, but for some reason it's still firing on new\edit post. Q3: the reason i'd like to deal with the title is that WP allows the user to save a post without a title, and i don't want to allow it.
- 0
- 2012-01-25
- Matanya
-
Aumoment où `save_post`est appelé,lapublication a déjà étéinsérée dans labase de données.Vouspouvez utiliserjQuerypourempêcher l'envoi dumessage dans le cas où untitren'estpas saisi.Lafonction ci-dessus dansma réponse sera appelée avec unnouveaumessage/modifier,ellene fera rien.Si celane fonctionnepaspour vous,modifiez votre questionpourinclure le codeet quelqu'unpourrapeut-être vous aider.By the time `save_post` is called the post has already been inserted into the database. You could use jQuery to prevent the post from being submitted in the case that a title isn't entered. The above function in my answer will be called with a new/edit post, its just won't do anything. If it's not working for you, edit your question to include the code and someone may be able to help.
- 0
- 2012-01-25
- Stephen Harris
-
Vousn'avezpasbesoin de renvoyer «$post_id».`do_action ()`n'attendpas de valeur de retour.You don’t need to return `$post_id`. `do_action()` doesn’t expect a return value.
- 0
- 2012-01-26
- fuxia
-
Vous avez raison.Maisj'avaisbesoin de quitter lafonction.Juste habitudeje suppose: DYou're right. But I did need to exit the function. Just habit I suppose :D
- 0
- 2012-01-26
- Stephen Harris
J'utilise uneméta-boîtepour letype demessagepersonnalisé.J'aitroisproblèmes:
TIApour votre aide.