Pourquoi l'action save_post se déclenche-t-elle lors de la création d'un nouveau message?

31

Je suis surpris par le fait que ma fonction que j'ai clouée sur l' save_postaction se déclenche lorsque je clique sur le lien "Nouveau message" dans le tableau de bord d'administration. Remarque - c'est avant d'avoir appuyé sur Saveou Update, et il se déclenche immédiatement, pas après un temps écoulé ou une mise à jour automatique.

D'autre part, quand je puis tapez quelque chose et appuyez sur la Publishou Updateou des Save Draftboutons, la déclaration d'écho , je l' ai mis dans mon gestionnaire d'action n'a pas d' écho, donc il semble que l'action ne se déclenche pas à tout autre moment. Cela peut être indépendant.

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 ne résonne PAS lorsque je tape quelque chose et que j'appuie sur Updateou Publishou Save Draft. Cela semble contredire la documentation sur l' save_postaction et la wp_insert_post()fonction.

Quelqu'un peut-il clarifier cela pour moi?

Tom Auger
la source
Impressionnant!!! je suis dans la même situation lors de l'enregistrement des champs de métabox personnalisés. une idée de ce que je peux utiliser ??
Prasath Nadarajah

Réponses:

39

Lorsque vous cliquez sur «Nouveau message», vous chargez simplement la page wp-admin/post-new.php.

Ce faisant, WordPress toujours créer un nouveau poste (un « Auto Projet ») pour assurer que toutes les autres fonctionnalités (telles que les téléchargements de médias) et le travail des plugins comme d' habitude, avant même que vous fait enregistrer un brouillon ou publier le poste.

Et cela, à son tour, déclenche save_post. D'où ton écho.

D'accord, alors pourquoi ne reçois-je pas 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 GETredirection vers la même page, qui semble transparente (vous pouvez en témoigner avec un moniteur HTTP, tel que HttpFox ).

En d'autres termes;

  1. Vous cliquez UpdateouPublish
  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 (car vous pouvez simplement accéder POSTà la même page), mais elle fait partie d'une technique connue sous le nom de Post / Redirect / Get 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 accrochée save_post, consultez ces questions / réponses .

* Pas strictement vrai, votre écho se produira en fait avant que l'en-tête de redirection ne soit envoyé, mais le navigateur le supprimera ou les choses se produisent si rapidement qu'il ne s'affiche jamais.

TheDeadMedic
la source
Exceptionnel. Merci pour cette réponse complète et détaillée! Dans le but d'en savoir plus, comment avez-vous découvert cette connaissance en premier lieu?
Tom Auger
Grâce à la même frustration que vous avez vécue;) Mettez la main sur un bon IDE (j'utilise phpDesigner) et plongez-vous simplement dans le ou les fichiers d'administration pertinents.
TheDeadMedic
1
Droit sur le frère. Merci d'être là avec votre expertise!
Tom Auger
Super information. Je devenais fou parce que sur mon serveur local cela semblait fonctionner "ok", mais pas sur mon serveur de production ... on dirait que sur mon serveur local il n'appliquait pas correctement la technique post / redirect / get parce que ce n'était pas l'envoi de l'en-tête de redirection (je ne sais pas pourquoi cependant).
Le WebMacheter du