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_IDe $dataquesto è 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_statuse $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_IDe $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 $updateche è 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_posto le wp_insert_postfunzioni.
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_actionchiamata.
Ad esempio, se si desidera utilizzare l' '$update'argomento (ovvero il 3 °) 'save_post'dell'hook, è necessario aggiungere 3come $accepted_argsparametro 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_actionvenga 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.