web-dev-qa-db-fra.com

Fonction à exécuter lorsqu'une publication est déplacée dans la corbeille. 

Bonjour, existe-t-il une action pouvant être exécutée lorsqu'un message est déplacé dans la corbeille?. J'ai essayé delete_post et delete_post. Cela ne fonctionne que deux fois pour chaque action (avant et après l'action telle qu'elle est écrite dans le codex) et la sortie n'est affichée que lorsque la publication est supprimée de la corbeille. Exemple: je souhaite envoyer un courrier électronique à l'auteur pour lui indiquer que son message a été déplacé vers la corbeille pour une raison quelconque et mettre à jour un certain user_meta. si j'utilise

add_action('deleted_post', 'emailUser');

ou

add_action('delete_post', 'emailUser');

cela ne fonctionne que lorsque le message est supprimé de la corbeille. . .

Mise à jour: cela a fonctionné pour les messages de corbeille en utilisant

add_action('trash_post', 'emailUser');

mais le problème de la double exécution de la fonction est toujours là. . .

9
Harjeet Singh

Ça fera l'affaire!

add_action('trash_post','my_trash_post_function',1,1);
function my_trash_post_function($post_id){
    if(!did_action('trash_post')){
        // do stuff
    }
}

Ici, nous ajoutons la fonction, et pour empêcher le hook d’exécuter plus d’une fois en utilisant did_action:

http://codex.wordpress.org/Function_Reference/did_action

Comme toujours, ces types de crochets se présentent sous la forme {post_status}_{post_type}, donc trash_post, trash_page, trash_customposttype, publish_page etc.

10
Tom J Nowell

Cette action sera appelée une fois lorsque le message est placé dans la corbeille, puis à nouveau lorsque la corbeille est vidée.

Votre fonction pourrait vérifier la présence d'une option avec l'identifiant de publication dans le nom. Si l'option n'est pas présente, elle envoie le courrier électronique, puis définit l'option. Si l'option existe (par exemple, elle est appelée une deuxième fois), vous n'enverriez pas l'e-mail.

N'oubliez pas ensuite de supprimer l'option, pour que votre base de données ne se remplisse pas!

add_action( 'delete_post', 'emailUser' );

function emailUser( $postid ) {

   if ( ! get_option( 'user_emailed_' . $postid ) ) {
      // send email here
      update_option( 'user_emailed_' . $postid, 'anything' );
   } else {
      delete_option( 'user_emailed_' . $postid );
   }

}

Faites-moi savoir si cela fonctionne!

2
Simon Blackbourn
add_action('trash_post', 'trash_post_function_name');

Le hook ci-dessus ne fonctionnait pas pour moi dans WP 4.7.5.

C'est ce qui a fonctionné pour moi

add_action('wp_trash_post', 'trash_post_function_name');
1