Hook per il cestino di un post personalizzato
Voglio eseguire un'azione quando elimino uno dei miei custom post type, quale hook dovrei usare:
wp_trash_mycpt
oppure
trash_mycpt
La mia azione dovrebbe essere eseguita solo quando mycpt
è negli stati 'publish', 'draft' o 'future'
e viene spostato nello stato 'trash'. Quando viene rimosso definitivamente dal cestino non c'è motivo di eseguire nuovamente la funzione.

L'wp_trash_post
hook potrebbe essere quello che stai cercando:
Si attiva prima che un articolo venga spostato nel cestino.
Inoltre, c'è l'trashed_post
hook:
Si attiva dopo che un articolo è stato spostato nel cestino.
Ecco del codice non testato per aiutarti a iniziare:
function my_wp_trash_post( $post_id ) {
$post_type = get_post_type( $post_id );
$post_status = get_post_status( $post_id );
if ( $post_type == 'mycpt' && in_array(
$post_status, array( 'publish','draft','future' )
)) {
// fai le tue operazioni
}
}
add_action( 'wp_trash_post', 'my_wp_trash_post' );

La funzione wp_trash_post()
non cambia lo post_status
in trash
prima di chiamare l'hook wp_trash_post
?

No, dopo. Basta guardare il codice.

Bene che sia stato cambiato allora. Ricordo di averlo controllato un paio di anni fa e non era così!

@dalbaeb Fino ad ora ho usato l'hook trash_post, qual è la differenza con wp_trash_post?

Inoltre non sarebbe meglio usare wp_trash_mycpt invece di verificare il tipo di post all'interno della funzione?

@drtanz Perché trash_post
è deprecato. Inoltre, non riesco a trovare un hook variabile per questo tipo di azione (hai un link?), quindi wp_trash_post
è davvero la migliore opzione che hai.

Ecco un ticket correlato: http://core.trac.wordpress.org/ticket/15628
Sto effettivamente usando trash_mycpt nel mio plugin e funziona bene, quindi ho presupposto che wp_trash_mycpt avrebbe funzionato allo stesso modo.

Esegui la tua funzione quando lo stato del post cambia da uno qualsiasi di publish
, draft
o future
a trash
.
<?php
function my_function() {
global $post;
if('my_post_type' == $post->post_type) {
// fai le tue operazioni qui
}
}
add_action('publish_to_trash', 'my_function');
add_action('draft_to_trash', 'my_function');
add_action('future_to_trash', 'my_function');
Maggiori informazioni: Transizioni dello stato del post

C'è un'azione wp_trash_post
che viene chiamata, ma lo post_status
viene modificato in trash
in precedenza, il che significa che non sareste in grado di verificare se il Post era pubblicato, ecc.
MODIFICA Mi correggo, lo post_status
viene modificato in trash
DOPO che l'azione è stata chiamata.
Questo dovrebbe comunque aiutarti a iniziare -
add_action('wp_trash_post', 'my_wp_trash_post')
function my_wp_trash_post(){
if($post->post_type === 'mycpt') :
// Fai quello che devi fare qui
endif;
}
Se può essere utile, c'è anche un'azione delete_post
. Per maggiori informazioni, consulta il Riferimento delle Azioni per delete_posts
.
