Je suis surpris par le fait que ma fonction que j'ai ajoutée à l'action save_post
se déclenche lorsque je clique sur le lien "Nouveau message" dans le tableau de bord de l'administrateur. Remarque - c'est avant d'avoir appuyé sur Save ou Updateet se déclenche immédiatement, pas après un temps écoulé ou une mise à jour automatique.
D'autre part, quand je tape quelque chose et que j'appuie sur le bouton Publish ou Update ou Save Draft boutons, la déclaration d'écho que j'ai insérée dans mon gestionnaire d'actions ne résonne pas en écho; il apparaît donc que l'action ne se déclenche PAS à un autre moment. Cela peut être sans rapport.
Voici mon code:
add_action('save_post', 'MyNS\save_event_metabox', 10, 2);
function save_event_metabox($post_id, $post){
echo "<h1>YES!</h1>";
}
Cet OUI fait écho (en haut de la page) lorsque j'appuie sur le lien "Nouveau message", mais n'émet PAS d'écho lorsque je tape quelque chose puis que j'appuie sur Update ou Publish ou Save Draft. Cela semble contredire la documentation sur l'action save_post
et la fonction wp_insert_post()
.
Quelqu'un peut-il éclaircir cela pour moi?
Lorsque vous cliquez sur "Nouveau message", vous chargez simplement la page wp-admin/post-new.php
.
Ce faisant, WordPress créera toujours un nouveau message (un "brouillon automatique") afin de garantir que toutes les autres fonctionnalités (telles que le téléchargement de contenu multimédia) et les plugins fonctionnent normalement, même avant que you enregistre réellement un brouillon ou publie la poste.
Et cela, à son tour, déclenche save_post
. D'où votre écho.
D'accord, alors pourquoi ne pas avoir d'écho lors de la mise à jour ou de la publication?
Entre l'enregistrement et le chargement de la page suivante, WordPress envoie en réalité une redirection GET
à la même page, qui apparaît transparente (vous pouvez en témoigner avec un moniteur HTTP, tel que HttpFox ).
En d'autres termes;
Update
ou Publish
save_post
La redirection peut sembler inutile (puisque vous pouvez simplement POST
sur la même page), mais elle fait partie d'une technique appelée Post/Redirect/Get pour éviter les soumissions de formulaire en double .
Si vous essayez d’imprimer des messages personnalisés en fonction du résultat d’une fonction rattachée à save_post
, consultez ces questions/réponses .
* Ce n'est pas tout à fait vrai, votre écho se produira avant l'envoi de l'en-tête de redirection, mais le navigateur le supprimera ou les choses se produiront si rapidement qu'elles ne seront jamais rendues.