Hook para cuando se envía una publicación a la papelera

15 mar 2013, 17:31:32
Vistas: 14.6K
Votos: 6

Quiero realizar una acción cuando elimino uno de mis custom post types, ¿qué hook debería usar:

wp_trash_mycpt

o

trash_mycpt

Mi acción debería ejecutarse únicamente cuando mycpt está en los estados 'publish', 'draft' o 'future' y pasa al estado 'trash'. Cuando se elimina definitivamente de la papelera no hay necesidad de ejecutar la función nuevamente.

0
Todas las respuestas a la pregunta 3
8
12

El hook wp_trash_post podría ser lo que estás buscando:

Se ejecuta antes de que una entrada sea enviada a la papelera.

También existe el hook trashed_post:

Se ejecuta después de que una entrada es enviada a la papelera.

Aquí tienes un código no probado para empezar:

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' )
    )) {
        // haz lo que necesites
    }
}
add_action( 'wp_trash_post', 'my_wp_trash_post' );
15 mar 2013 17:47:25
Comentarios

¿No cambia la función wp_trash_post() el post_status a trash antes de llamar al hook wp_trash_post?

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

No, después. Solo mira el código.

montrealist montrealist
15 mar 2013 17:59:11

Me alegra que lo hayan cambiado. ¡Recuerdo haber revisado esto hace un par de años y ese no era el caso!

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

@dalbaeb Hasta ahora he estado usando el hook trash_post, ¿cuál es la diferencia entre ese y wp_trash_post?

urok93 urok93
15 mar 2013 19:12:06

Además, ¿no sería mejor usar wp_trash_mycpt en lugar de verificar el tipo de publicación dentro de la función?

urok93 urok93
15 mar 2013 19:13:48

@drtanz Porque trash_post está obsoleto. Además, no puedo encontrar un hook variable para este tipo de acción (¿tienes un enlace?), así que wp_trash_post es realmente la mejor opción que tienes.

montrealist montrealist
15 mar 2013 20:44:43

Aquí hay un ticket relacionado: http://core.trac.wordpress.org/ticket/15628

De hecho, estoy usando trash_mycpt en mi plugin y funciona bien, así que asumí que wp_trash_mycpt también funcionaría.

urok93 urok93
16 mar 2013 06:46:39

El enlace no menciona trash_mycpt en ningún lado. Ok, si todo funciona bien entonces dime, ¿cuál era el punto de tu pregunta?

montrealist montrealist
17 mar 2013 00:20:54
Mostrar los 3 comentarios restantes
1

Ejecuta tu función cuando el estado de la publicación cambie de cualquiera de publish, draft o future a trash.

<?php
function my_function() {
    global $post;
    if('my_post_type' == $post->post_type) {
        // haz tus operaciones aquí
    }
}

add_action('publish_to_trash', 'my_function');
add_action('draft_to_trash',   'my_function');
add_action('future_to_trash',  'my_function');

Más información: Transiciones de Estado de Publicación

15 mar 2013 17:48:13
Comentarios

Estos son útiles, pero creo que wp_trash_post/trash_post funcionará bien en mi caso ya que en realidad no necesito este nivel de control.

urok93 urok93
15 mar 2013 19:14:55
1

Existe una acción wp_trash_post que se llama, pero el post_status se cambia a trash de antemano, lo que significa que no podrías verificar si el Post estaba publicado, etc.

EDITADO Me corrijo, el post_status se cambia a trash DESPUÉS de que se llama la acción.

Esto debería ayudarte a comenzar -

add_action('wp_trash_post', 'my_wp_trash_post')
function my_wp_trash_post(){

    if($post->post_type === 'mycpt') :
        // Haz lo que necesites hacer aquí
    endif;

}

Si es de utilidad, también existe una acción delete_post. Para más información, consulta la Referencia de Acciones para delete_posts.

15 mar 2013 17:47:50
Comentarios

¿No sería mejor usar wp_trash_mycpt en lugar de verificar el tipo de publicación dentro de la función?

urok93 urok93
15 mar 2013 19:13:14