Perché l'azione save_post si attiva quando si crea un nuovo post?


31

Sono sorpreso dal fatto che la mia funzione che ho applicato save_postall'azione viene attivata quando faccio clic sul link "Nuovo post" nella Dashboard di amministrazione. Nota: questo è prima che io abbia premuto Saveo Update, e si attivi immediatamente, non dopo un tempo trascorso o l'aggiornamento automatico.

D'altra parte, quando digito qualcosa e premo i pulsanti Publisho Updateo Save Draft, l'istruzione echo che ho inserito nel mio gestore di azioni non echeggia, quindi sembra che l'azione NON si attivi in ​​nessun altro momento. Questo potrebbe non essere correlato.

Ecco il mio codice:

add_action('save_post', 'MyNS\save_event_metabox', 10, 2);
function save_event_metabox($post_id, $post){
  echo "<h1>YES!</h1>";
}

Questo SÌ fa eco (nella parte superiore della pagina) quando premo il link "Nuovo messaggio" ma NON fa eco quando scrivo qualcosa e quindi premo Updateo Publisho Save Draft. Ciò sembra contraddire la documentazione save_postsull'azione e sulla wp_insert_post()funzione.

qualcuno può chiarire questo per me?


Eccezionale!!! mi sto imbattendo nella stessa situazione durante il salvataggio di campi metabox personalizzati. qualche idea di cosa posso usare ??
Prasath Nadarajah,

Risposte:


39

Quando fai clic su "Nuovo post", stai semplicemente caricando la pagina wp-admin/post-new.php.

In tal modo, WordPress creerà sempre un nuovo post (un "Bozza automatica") per garantire che tutte le altre funzionalità (come i caricamenti multimediali) e i plug-in funzionino normalmente, anche prima di salvare effettivamente una bozza o pubblicare il post.

E questo, a sua volta, si innesca save_post. Da qui la tua eco.

Ok, quindi perché non ricevo l'eco durante l'aggiornamento o la pubblicazione?

Tra il salvataggio e il caricamento della pagina seguente, WordPress sta effettivamente inviando un GETreindirizzamento alla stessa pagina, che appare trasparente (puoi vederlo con un monitor HTTP, come HttpFox ).

In altre parole;

  1. Fai clic su UpdateoPublish
  2. Il browser invia i dati al server
  3. WordPress lo gestisce e nel processo si innesca save_post
  4. WordPress restituisce un'intestazione di reindirizzamento ed esce prima che si verifichi qualsiasi output del browser (incluso l'eco) *
  5. Il browser segue il reindirizzamento e carica la pagina "modifica post".

Il reindirizzamento potrebbe sembrare superfluo (dal momento che potresti semplicemente POSTaccedere alla stessa pagina), ma fa parte di una tecnica nota come Post / Redirect / Get per evitare invii di moduli duplicati .

Se stai tentando di stampare messaggi personalizzati in base al risultato di una funzione collegata save_post, dai un'occhiata a queste domande / risposte .

* Non proprio vero, l'eco si verificherà effettivamente prima che venga inviata l'intestazione di reindirizzamento, ma il browser lo scarterà o le cose accadono così rapidamente che non viene mai visualizzato.


Eccezionale. Grazie per una risposta così completa e dettagliata! Nell'interesse di saperne di più, come hai scoperto questa conoscenza in primo luogo?
Tom Auger,

Attraverso la stessa frustrazione che stavi riscontrando;) Procurati un buon IDE (io uso phpDesigner) e approfondisci i file di amministrazione pertinenti.
TheDeadMedic l'

1
Proprio fratello. Grazie per essere lì con la tua esperienza!
Tom Auger,

Informazioni straordinarie. Stavo andando fuori di testa perché nel mio server locale sembrava funzionare "ok", ma non nel mio server di produzione ... sembra che nel mio server locale non stia applicando correttamente la tecnica post / redirect / get perché non lo era invio dell'intestazione di reindirizzamento (non so perché).
WebMacheter,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.