web-dev-qa-db-fra.com

Pourquoi l'action save_post est-elle déclenchée lors de la création d'un nouveau message?

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?

31
Tom Auger

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;

  1. Vous cliquez sur Update ou Publish
  2. Le navigateur envoie des données au serveur
  3. WordPress le gère et déclenche dans le processus save_post
  4. WordPress renvoie un en-tête de redirection et se ferme avant toute sortie du navigateur (y compris votre écho) *
  5. Le navigateur suit la redirection et charge la page 'edit 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.

37
TheDeadMedic