Quando un post viene aggiornato ci sono alcuni hook che vengono attivati:
'pre_post_update'
è un'azione lanciata poco prima dell'aggiornamento del post, gli argomenti passati sono 2: $post_ID
e $data
questo è un array di tutte le altre colonne del database della tabella post
'transition_post_status'
è un hook attivato durante l'aggiornamento e passa 3 argomenti: $ new_post_status $old_post_status
e $post
(oggetto).
- Quindi, ci sono altri 2 hook di transizione attivati, ma hanno un nome dinamico, ciò significa che l'azione effettiva attivata dipende dal vecchio e dal nuovo stato del post.
"{$old_status}_to_{$new_status}"
e "{$new_status}_{$post->post_type}"
. Prima passa l'unico oggetto post come argomento, il secondo passa l'id post e l'oggetto post. Trova la documentazione qui .
'edit_post'
che passano 2 argomenti: $post_ID
e $post
(oggetto)
'post_updated'
che passa 3 argomenti $post_ID
, $post_after
(oggetto postale dopo l'aggiornamento), $post_before
(oggetto postale prima dell'aggiornamento)
- Un altro gancio dinamico:
"save_post_{$post->post_type}"
che dipende dal tipo di messaggio, ad esempio per i posti standard è di 'save_post_post'
per pagine è 'save_post_page'
, questo passaggio gancio 3 argomenti $post_ID
, $post
(oggetto) e $update
che è un valore booleano (vero o falso) che è vero quando si esegue un aggiornamento, in infatti questo hook viene attivato anche quando un post viene salvato per la prima volta.
- '
save_post
' che viene attivato sia all'aggiornamento che al primo salvataggio e passa gli stessi 3 argomenti dell'hook precedente.
- '
save_post_{$post_type}
' che viene attivato sia al momento dell'aggiornamento che al primo salvataggio e passa gli stessi primi 2 argomenti dell'hook precedente.
- Alla fine hai '
wp_insert_post
' , che viene attivato sia al momento dell'aggiornamento che al primo salvataggio, e passa gli stessi 3 argomenti dei precedenti 2 hook.
Questi hook vengono attivati ogni volta che un post viene aggiornato, sia tramite le pagine di amministrazione nel back-end che tramite quando viene aggiornato "manualmente" utilizzando wp_update_post
o le wp_insert_post
funzioni.
Quando il post viene aggiornato utilizzando le pagine di amministrazione, vengono attivati hook aggiuntivi, un esempio è 'update_post_redirect'
o 'post_updated_messages'
. (Vedi questo e questo WPSE risponde per esempi di utilizzo).
Si noti che se si desidera utilizzare alcuni argomenti hook, che non è il primo, è necessario dichiararlo esplicitamente in add_action
chiamata.
Ad esempio, se si desidera utilizzare l' '$update'
argomento (ovvero il 3 °) 'save_post'
dell'hook, è necessario aggiungere 3
come $accepted_args
parametro su add_action
( consultare i documenti ):
// 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 );
}
L'ultima nota riguarda i tempi : devi essere sicuro che add_action
venga chiamato prima che l'azione venga attivata, altrimenti non farà nulla.
Ad esempio questo codice:
wp_update_post( $post );
add_action( 'save_post', 'my_function', 10, 3 );
non farà nulla, poiché l'azione viene aggiunta dopo l'attivazione dell'hook. Qui è semplice riconoscerlo, nel codice del mondo reale non è sempre così.
save_post
, è un errore di battitura qui, o era nel tuo codice originale? inoltre, abilitare il debug durante lo sviluppo.