qual è il modo corretto di agganciarsi quando si aggiorna il post
-
-
hai uno spazio dopo `save_post`,è unerrore dibattitura qui,oeraneltuo codice originale?inoltre,[abilitail debug] (http://codex.wordpress.org/Debugging_in_WordPress) durante lo sviluppo.you have a space after `save_post`, is that a typo here, or was that in your original code? also, [enable debugging](http://codex.wordpress.org/Debugging_in_WordPress) while developing.
- 2
- 2014-02-14
- Milo
-
@Milo scusaerrore dibattitura,manonnel codice originale@Milo sorry typo, but not in original code
- 0
- 2014-02-14
- rusly
-
se è così,dovresti vedereiltuo outputnell'angoloin alto a sinistra dello schermo quando crei unnuovopost.il salvataggio di unpostesistente avvieneprima di un reindirizzamento,quindinon vedrainulla ameno chetunon abbia abilitatoil debug.if that's the case, then you should see your output in the top left corner of the screen when creating a new post. saving an existing post happens before a redirect, so you won't see anything unless you have debugging enabled.
- 0
- 2014-02-14
- Milo
-
2 risposta
- voti
-
- 2014-02-14
Quando unpost viene aggiornato,vengono attivati alcuni hook:
- <"
'pre_post_update'
è un'azione attivata appena prima cheilpost venga aggiornato,gli argomentipassati sono 2:$post_ID
e$ data
che è un array di tutte le altre colonne del database dellatabella deipost - <"
'transition_post_status'
è un hook attivato all'aggiornamentoe passa 3 argomenti: $new_post_status,$ old_post_status
e$post
(oggetto). - Poi,ci sono altri 2 hook ditransizione attivati,ma hanno unnome dinamico,significa che l'azioneeffettiva lanciata dipende dal vecchioe dalnuovo stato delpost.
"{$old_status}_to_{$new_status}"
e"{$new_status} _ {$post- >post_type}"
. Primapassa l'unico oggettopost come argomento,il secondopassa l'id delposte l'oggettopost. Trova la documentazione qui . - <"
'edit_post'
che supera 2 argomenti:$post_ID
e$post
(object) - <"
'post_updated'
che supera 3 argomenti:$post_ID
,$post_after
(oggettopost dopo l'aggiornamento ),$post_before
(oggettopostprima dell'aggiornamento) - Un altro hook dinamico:
"save_post_{$post->post_type}"
che dipende daltipo dipost,ades.peri post standard è'save_post_post'
e per lepagine è'save_post_page'
,questo hookpassa 3 argomenti:$post_ID
,$post
(oggetto)e$ update
che è unbooleano (vero ofalso) che è vero quandoesegui un aggiornamento,infatti questo hook viene attivato anche quando unpost viene salvatoper laprima volta . - "
save_post
" che viene attivato sia all'aggiornamento che alprimo salvataggioe passagli stessi 3 argomenti dell'hookprecedente. - '
save_post _ {$post_type}
' che viene attivato sia all'aggiornamento che alprimo salvataggioe passagli stessiprimi 2 argomenti dell'hookprecedente. - Infine hai '
wp_insert_post
' ,che viene attivato sia all'aggiornamento che alprimo salvataggio,e passagli stessi 3 argomenti dei 2 hookprecedenti.
Questi hook vengono attivati ogni volta che unpost viene aggiornato,siatramite lepagine di amministrazionenelbackend siatramite quando aggiornato "manualmente" utilizzando
wp_update_post
owp_insert_post
funzioni.Quandoilpost viene aggiornato utilizzando lepagine di amministrazione,vengono attivati hook aggiuntivi,unesempio è
"update_post_redirect "
o"post_updated_messages"
. (Vedi questo e questo WPSE rispondeperesempi di utilizzo).Nota che se vuoi usare qualche argomento hooks,questonon èilprimo,devi dichiararloesplicitamentenella chiamata
add_action
.Adesempio se vuoi usare l'argomento
'$ update'
(che èilterzo) dell'hook'save_post'
devi aggiungere3
come$ Accept_args
param suadd_action
( vedi documenti )://senon aggiungi 3 come quarto argomento,nonfunzionerà comeprevisto add_action ('save_post','my_save_post_function',10,3); funzionemy_save_post_function ($post_ID,$post,$ update) { $msg='Questo è un aggiornamento? '; $msg.=$ update? 'Sì.' : 'No.'; wp_die ($msg); }
Ultimanotaper quanto riguardail timing : deviessere sicuro che
add_action
sia chiamato prima che l'azione venga attivata,altrimentinonfarànulla.Adesempio questo codice:
wp_update_post ($post); add_action ('save_post','my_function',10,3);
nonfarànulla,perché l'azione viene aggiunta dopo cheilgancio è stato attivato. Qui è semplice riconoscerlo,nelmondo realeil codicenon è sempre così.
When a post is updated there are some hooks that are fired:
'pre_post_update'
is an action fired just before the post is updated, the argument passed are 2:$post_ID
and$data
that is an array of all the other database colums of the post table'transition_post_status'
is an hook fired on update, and pass 3 arguments: $new_post_status,$old_post_status
and$post
(object).- Then, there are other 2 transition hooks fired, but they are dynamic named, it means that the effective action fired depends on the old and the new post status.
"{$old_status}_to_{$new_status}"
and"{$new_status}_{$post->post_type}"
. First pass the only the post object as argument, the second pass the post id and the post object. Find documentation here. 'edit_post'
that pass 2 arguments:$post_ID
and$post
(object)'post_updated'
that pass 3 arguments:$post_ID
,$post_after
(post object after the update),$post_before
(post object before the update)- Another dynamic hook:
"save_post_{$post->post_type}"
that depends on post type, e.g. for standard posts is'save_post_post'
and for pages is'save_post_page'
, this hook pass 3 arguments:$post_ID
,$post
(object) and$update
that is a boolean (true or false) that is true when you perform an update, in fact this hook is fired also when a post is saved for first time. - '
save_post
' that is fired both on update and on first saving, and pass the same 3 arguments of the previous hook. - '
save_post_{$post_type}
' that is fired both on update and on first saving, and pass the same first 2 arguments of the previous hook. - Finally you have '
wp_insert_post
', that is fired both on update and on first saving, and pass the same 3 arguments of the previous 2 hooks.
These hook are fired every time a post is updated, both via admin pages in backend and via when updated "manually" using
wp_update_post
orwp_insert_post
functions.When the post is updated using admin pages there are additional hooks fired, an example is
'update_post_redirect'
or'post_updated_messages'
. (See this and this WPSE answers for usage examples).Note that if you want make use of some hooks argument, that isn't the first, one you have to explicitly declare it in
add_action
call.E.g. if you want to use the
'$update'
argument (that is the 3rd) of the'save_post'
hook you need to add3
as$accepted_args
param onadd_action
(see docs):// if you don't add 3 as as 4th argument, this will not work as expected add_action( 'save_post', 'my_save_post_function', 10, 3 ); function my_save_post_function( $post_ID, $post, $update ) { $msg = 'Is this un update? '; $msg .= $update ? 'Yes.' : 'No.'; wp_die( $msg ); }
Last note regard timing: you must be sure that
add_action
is called before the action is triggered, or it will do nothing.E.g. this code:
wp_update_post( $post ); add_action( 'save_post', 'my_function', 10, 3 );
will do nothing, because the action is added after the hook is fired. Here is simple to recognize it, in real world code isn't always so.
-
Penso che anche l'action hook "save_post" venga attivato quando sipreme Aggiunginuovo (post,pagina,CPT)nella dashboard.Per vederti,esegui questo codice.`funzione save_post_test ($post_id,$post,$ update) { print 'post_id:'; var_export ($post_id); print "post:"; var_export ($post); print 'update:'; var_export ($ update); wp_die ('save_post hook vieneeseguito quandofai clic su Aggiunginuovo ..'); } add_action ('save_post','save_post_test',10,3); ` Perché l'azione "save_post" vieneeseguita su Aggiunginuovoinvece che su Pubblica?Suppongo difareilpostin bozza automatica.I think that the 'save_post' action hook is also fired when hitting Add New (Post, Page, CPT) in the dashboard. To see yourself just run this code. `function save_post_test( $post_id, $post, $update ) { print ' post_id : '; var_export( $post_id ); print ' post : '; var_export( $post ); print ' update : '; var_export( $update ); wp_die( 'save_post hook runs when you click Add New..' ); } add_action( 'save_post', 'save_post_test', 10, 3 );` Why does the 'save_post' action run on Add New instead of on Publish? To make the auto-draft post I suppose.
- 0
- 2018-11-12
- lowtechsun
-
@lowtechsun Come si dicein A,gli hook vengono attivati ogni volta che unpost viene aggiornato,cioè salvatoin DB.Quandopremi "Aggiunginuovo",vicino al caricamento dellapagina,WP crea unabozza dipost archiviatanel DBin modo chegli hook vengano attivati.@lowtechsun Like it is said in the A, the hooks are fired every time a post is updated, i.e. saved in DB. When you hit "Add New", close to page loading, WP creates a draft post stored in DB so he hooks are fired.
- 0
- 2018-11-13
- gmazzap
-
Grazieperesseretornato dame.L'ho appena scopertoierie hopensato cheil concettofosse confuso.Significa cheprima apro lapaginaper aggiungere unnuovopost.In questafasepensavo di _non_ di avergià creato unpost.Solo _ una volta_ chepremo Pubblicapenserei cheilnuovopost sia stato creato.Andando oltre,spero che WPelimini labozza automatica delpost _if_premo Aggiunginuovomapoiesco dallapagina senzapremere Pubblica?Thank you for getting back to me. Just found out about this yesterday and thought the concept of this is confusing. Meaning first I open the page to add a new post. At this stage I thought I have _not_ already created a post. Only _once_ I hit Publish I would think the new post is created. Taking this further I hope WP does delete the auto-draft post _if_ I hit Add New but then leave the page without hitting Publish?
- 0
- 2018-11-13
- lowtechsun
-
- 2014-02-14
Perchénon agganciarsi a
post_updated_messages
.In questomodopuoimostrare questomessaggioproprio comeilpost wordpresspredefinito aggiornato.add_filter('post_updated_messages', 'your_message'); function your_message(){ }
Cerca unesempio qui:
http://codex.wordpress.org/Function_Reference/register_post_type
in
post_updated_messages
Why not hook in
post_updated_messages
. That way you can show this message just like the default wordpress post updated.add_filter('post_updated_messages', 'your_message'); function your_message(){ }
Look for an example here:
http://codex.wordpress.org/Function_Reference/register_post_type
under
post_updated_messages
cerco di agganciare quandoilpost viene aggiornatomatuttigli hook cheprovonon sonomai statieseguititranne
updated_post_meta
Hoprovato questo
add_action('save_post', 'my_function');
manessun ID è statoecho out,oforse questomessaggio ègiàechomanon vienemai visualizzatoperché è statainviata l'intestazione di reindirizzamento./p>