Hook per il cestino di un post personalizzato

15 mar 2013, 17:31:32
Visualizzazioni: 14.6K
Voti: 6

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.

0
Tutte le risposte alla domanda 3
8
12

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' );
15 mar 2013 17:47:25
Commenti

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

David Gard David Gard
15 mar 2013 17:51:27

No, dopo. Basta guardare il codice.

montrealist montrealist
15 mar 2013 17:59:11

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

David Gard David Gard
15 mar 2013 18:04:17

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

urok93 urok93
15 mar 2013 19:12:06

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

urok93 urok93
15 mar 2013 19:13:48

@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.

montrealist montrealist
15 mar 2013 20:44:43

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.

urok93 urok93
16 mar 2013 06:46:39

Il link non menziona da nessuna parte trash_mycpt. Ok, se tutto funziona correttamente, dimmi allora, qual era lo scopo della tua domanda?

montrealist montrealist
17 mar 2013 00:20:54
Mostra i restanti 3 commenti
1

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

15 mar 2013 17:48:13
Commenti

Questi sono utili, ma penso che wp_trash_post/trash_post saranno sufficienti nel mio caso, dato che in realtà non ho bisogno di questo livello di controllo.

urok93 urok93
15 mar 2013 19:14:55
1

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.

15 mar 2013 17:47:50
Commenti

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

urok93 urok93
15 mar 2013 19:13:14