web-dev-qa-db-fra.com

Comment activer une fonction uniquement lorsque je dois supprimer définitivement un message?

Je n'ai besoin de suspendre une fonction que lorsque je supprime définitivement une publication de la base de données. J'ai essayé le hook 'before_delete_post'. Cependant, elle est appelée à la fois lorsqu'elle est supprimée et définitivement supprimée.

La fonction wp_delete_post () appelle wp_trash_post () et doit cesser le traitement, mais il semble que la fonction wp_delete_post () soit appelée à nouveau après la suppression de la publication.

J'ai vu cette question: Wordpress Supprimer le hook avec la fonction wp_delete_post? . Mon besoin est exactement le contraire.

1
romulodl

Le problème était le plug-in "Sitewide tags", qui se comportait mal le flux naturel WP. Une fonction appelée sitewide_tags_post_delete() est accrochée à 'trash_post' et appelle wp_delete_post() pour supprimer la publication sur le blog principal.

En suivant l'approche de @ Stephen, j'ai fait ceci:

add_action('before_delete_post', 'my_deleted_post');
function my_deleted_post($post_id){
  global $blog_id;   
  if($blog_id == <main_blog_id>){ // usually is 1
    return false;
  }

  //do whatever you need :)
};
1
romulodl

before_delete_post n'est pas appelé lorsqu'un message est uniquement mis à la corbeille.

Alors que wp_delete_post() peut supprimer des publications (si la publication n'est pas supprimée et qu'elle n'est pas supprimée de force), il le fait en appelant wp_trash_post() et en quittant la fonction avant le déclenchement de l'action before_delete_post.

J'ai testé cela, la fonction suivante ne "mourra" que lorsque vous supprimerez définitivement une publication, mais pas lorsqu'elle sera confinée à la corbeille. Le wp_die doit montrer quand l'appel est passé - je ne recommande pas de l'utiliser sur un site actif.

add_action('before_delete_post', 'my_deleted_post');
function my_deleted_post($post_id){
   wp_die(var_dump($post_id));
};

La fonction wp_delete_post() peut être trouvée ici (WP 3.3.1)

6
Stephen Harris