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

30

Je suis surpris par le fait que la fonction que j'ai ajoutée à l'action save_post est activée lorsque je clique sur le lien "Nouveau message" dans le tableau de bord de l'administrateur. Remarque - ceci est avant d'avoir appuyé sur Enregistrer ou Mettre à jour , et il se déclenche immédiatement, pas après un temps écoulé ou une mise à jour automatique.

D'autre part, lorsque je tape quelque chose et que j'appuie sur les boutons Publier ou Mettre à jour ou Enregistrer le brouillon , l'instruction echo I J'ai mis à l'intérieur de mon gestionnaire d'action ne fait pas écho, il semble donc que l'action ne se déclenche pas à un autre moment. Cela peut ne pas être lié.

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 je clique sur le lien "Nouveau message" mais n'échoAGE PAS lorsque je tape quelque chose, puis que j'appuie sur Mettre à jour ou Publier ou Enregistrer le brouillon . Cela semble contredire la documentation sur l'action save_post et la fonction wp_insert_post() .

Quelqu'un peut-il clarifier cela pour moi?

    
posée Tom Auger 08.06.2011 - 20:31
la source

1 réponse

37

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 fichiers multimédias) et les plugins fonctionnent normalement, même avant d’enregistrer un brouillon ou publier le message.

Et ceci, à son tour, déclenche save_post . De là votre écho.

  

OK, 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 fait 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 "modifier le message".

La redirection peut sembler inutile (puisque vous pourriez simplement POST sur la même page), mais cela fait partie d'une technique connue sous le nom de Poster / Rediriger / Obtenir pour éviter les soumissions de formulaires en double .

Si vous essayez d'imprimer des messages personnalisés en fonction du résultat d'une fonction liée à save_post , consultez ces questions / réponses .

* 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'il ne sera jamais rendu.

    
réponse donnée TheDeadMedic 08.06.2011 - 20:58
la source

Lire d'autres questions sur les étiquettes