Come usare il filtro hook 'post_updated_messages' in coerenza con l'action hook 'save_post'
2 risposta
- voti
-
- 2012-07-20
<"Aggiornato:"
Innanzitutto,dovrai restituire un valorebool sulmetodo dinotificain modo dapoterimpostarein modo affidabile unindicatoreperilmetodo delmessaggio. Quindi,sarànecessarioimpostare unelemento dimatrice $ _POST dapassare alfiltro di reindirizzamento.
public function save_post($post_id){ //Add a $_POST key if you syndicated successfully if($this->send_group_notifications()) //return true from your notification method $_POST['syndicated'] = true; }
Il seguentefiltrofunziona daltuofilefunctions.php . Non sono riuscito afarlofunzionare correttamente da unfileplug-in. Fondamentalmente,quello che sta succedendo qui è che annusiamo l'elemento dell'array $ _POST che haiimpostatonell'azione save_poste vediamo se aggiungiamo una variabile della stringa di query al reindirizzamento.
add_filter('redirect_post_location', 'update_post_redirect'); function update_post_redirect($location){ $syndicated = isset($_POST['syndicated']) ? $_POST['syndicated'] : 0; if($syndicated == true) $location .= '&syndicated=1'; return $location; }
Infine,scopriamo la variabile $ _GETin modo dapoter determinare se ènecessario visualizzare unmessaggio.
public function message($messages){ $syndicated = isset($_GET['syndicated']); if($syndicated) //Do something with the messages array here. return $messages; }
Dai un'occhiata a questopostper unbell'esempio di come utilizzare questofiltro: Impostamessaggipersonalizzatiperpost aggiornamento/salvataggio
Spero che questoti aiuti!
Updated:
First, you will need to return a bool value on your notifications method so we can reliably set a marker for the message method. Then, you will need to set a $_POST array element to pass on to the redirection filter.
public function save_post($post_id){ //Add a $_POST key if you syndicated successfully if($this->send_group_notifications()) //return true from your notification method $_POST['syndicated'] = true; }
The following filter works from your functions.php file. I couldn't get it to work properly from a plugin file. Basically, what's happening here is we sniff out the $_POST array element you set in the save_post action and see if we add a query string variable to the redirect.
add_filter('redirect_post_location', 'update_post_redirect'); function update_post_redirect($location){ $syndicated = isset($_POST['syndicated']) ? $_POST['syndicated'] : 0; if($syndicated == true) $location .= '&syndicated=1'; return $location; }
Then finally, we sniff out the $_GET variable so we can determine if a message needs to be displayed.
public function message($messages){ $syndicated = isset($_GET['syndicated']); if($syndicated) //Do something with the messages array here. return $messages; }
Check out this post for a nice example of how to use this filter: Set custom messages for post update/save
Hope this helps you out!
-
Sembra che dovrebbeesserci una soluzionepiù semplice dellatuaideaproposta.Qualcosa cheforsenon richiede l'uso ditransitori?It seems there should be an easier solution than your proposed idea. Something that maybe doesn't require using transients?
- 0
- 2012-07-21
- Michael Ecklund
-
@MichaelEcklund Dopo alcuni scavie testfrustranti.Ho ottenuto questoperfunzionare senza aggiungereglobali otransitori.Dai un'occhiata allamia ultimamodifica.@MichaelEcklund After some digging and frustrating testing. I got this to work without adding globals or transients. Check out my latest edit.
- 0
- 2012-07-22
- Brian Fegter
-
Non sembrafunzionare?Forse stofacendo qualcosa di sbagliato.Potrestifare riferimento alletuemodifichein modo che sianointrecciate conil codice diesempio che hofornito?Puoimodificare latua risposta oil link apastebin.Does not appear to be working? Maybe I'm doing something wrong. Could you reference your changes so that it's intertwined with the sample code I have provided? You can edit your answer or link to pastebin.
- 0
- 2012-07-23
- Michael Ecklund
-
@MichaelEcklund Stai restituendo un valorebool daltuometodo send_group_notificatios?@MichaelEcklund Are you returning a bool value from your send_group_notificatios method?
- 0
- 2012-07-23
- Brian Fegter
-
No. Esegue solo alcuni altrimetodi.Uno chegestiscegli SMS,un altroper lapostaelettronicae unofinaleper lamessaggisticaistantanea.Non restituiscononulla.No. It just executes a few other methods. One that handles SMS, another for email and one final one for IM. They don't return anything.
- 0
- 2012-07-23
- Michael Ecklund
-
@BrianFegter - Hoprovato amodificare latua rispostamaeratroppopoco da cambiare ... $ _GET ['syndicated] dovrebbeessere $ _GET [' syndicated ']e $ synicated dovrebbe $ syndicated@BrianFegter - I tried to edit your answer but it was to little to change... $_GET['syndicated] should be $_GET['syndicated'] and $synicated should $syndicated
- 0
- 2013-10-10
- bestprogrammerintheworld
-
@bestprogrammerintheworld Grazieperil suggerimento.Modificato.@bestprogrammerintheworld Thanks for the tip. Edited.
- 0
- 2013-10-11
- Brian Fegter
-
@BrianFegter - seiilbenvenuto!:-)@BrianFegter - you're welcome! :-)
- 0
- 2013-10-11
- bestprogrammerintheworld
-
- 2015-02-25
Ho controllato come hafatto ACFe hoprovato amodo loro,hafunzionatoperme.
class Directory_Post_Type { public static $post_type = "directory"; public function __construct() { add_action( 'init', array( $this, 'init' ) ); add_action( 'admin_init', array( $this, 'admin_init' ) ); add_filter('post_updated_messages', array( $this, 'post_updated_messages') ); add_filter('bulk_post_updated_messages', array( $this, 'bulk_post_updated_messages'), 10, 2 ); } ......
I checked how ACF did it and tried it their way, worked for me.
class Directory_Post_Type { public static $post_type = "directory"; public function __construct() { add_action( 'init', array( $this, 'init' ) ); add_action( 'admin_init', array( $this, 'admin_init' ) ); add_filter('post_updated_messages', array( $this, 'post_updated_messages') ); add_filter('bulk_post_updated_messages', array( $this, 'bulk_post_updated_messages'), 10, 2 ); } ......
Sto cercando diinviaree-mail,SMSe notifiche dimessaggisticaistantanea aimembri delgruppo di questo sito Web WordPress,ogni volta che unapagina WordPressnel lorogruppo di utenti è statapubblicata/aggiornata.
Hopensato che utilizzare l'action hook
'save_post'
sarebbe stata la soluzionemigliore. Tuttavia,mi sonoimbattutoin alcunifattorifastidiosi lungo la stradae credo di avertrovato una soluzioneper loro.Uno deifattorifastidiosiera che ogni volta che lapagina veniva aggiornata,avrebbeeseguito l'azione due volte. Quindi ho usato la correzioneproposta qui e sembra avere correttoilproblema del doppio salvataggio. Se hai una soluzionemigliore alproblema del doppio salvataggio,sareifelice di leggerlo.
Ora,ilproblema che sto affrontando è chenon soesattamente come utilizzare correttamenteilfiltro hook
'post_updated_messages'
in coerenza con l'action hook'save_post'
. Quandoinseriscoil riferimento aadd_filter('post_updated_messages', array(&$this, 'message'));
nel costruttore della classe,viene visualizzatoilmessaggio aggiornato quando sono appena arrivato sul schermata dimodificae non hai ancorafatto clic sulpulsante di aggiornamento.Dopo averparlato con @rarstin chat,mi hainformato cheilfiltro
'post_updated_messages'
eraindicato come "luogo" e non come "evento" chemi ha dato l'idea di spostareil riferimento aadd_filter('post_updated_messages', array(&$this, 'message'));
a$this->save_post();
.Dopo aver spostatoilfiltroin
$this->save_post();
,oranon vedo affattoilmessaggio aggiornatopersonalizzato. Vedo soloiltipicomessaggiopost aggiornato. Tuttavia,ilmetodo dinotifica digruppo viene comunque attivato.Qual èilpostomiglioreperfareil riferimento alfiltro. O se questa situazionenon richiede questoparticolare hook,quale hook dovrebbeessere usatoe dove dovrebbeessereposizionato?
L'ho contrassegnato come correlato allo sviluppo diplug-in,anche se è solo unfile di classeinclusonelfile functions.php di questoparticolaretema WordPress attivo.
Ecco un'idea approssimativa di quello che ho: