J'ai cette action/crochet:
add_action( 'before_delete_post', 'my_delete_function' );
function my_delete_function($post_id) {
global $wpdb;
$achievement = get_the_category($post_id);
$h = $achievement[0]->cat_ID;
$s = ''.str_replace('"', '', $h);
if ( $s == 6 || $s == 5){
$wpdb->query("DELETE FROM wp_votes WHERE post = ".$post_id) or die(mysql_error());
}
}
Ce qui précède fonctionne très bien lorsque je supprime des messages de l’administrateur. Cependant, lorsque la fonction wp_delete_post () est appelée, l'action ne fonctionne pas.
Comment puis-je faire fonctionner l'action avec la fonction de suppression?
wp_delete_post()
toujours déclenche before_delete_post
- le problème doit être que vous accrochez votre fonction de manière conditionnelle (c'est-à-dire pas tout le temps).
before_delete_post
seulement est déclenché si vous supprimez la publication de façon permanente, pas seulement sa suppression.
Si vous devez également écouter la corbeille, utilisez wp_trash_post
.
Utilisation wp_delete_post:
wp_delete_post($postid, $force_delete = false)
Le crochet 'before_delete_post' n'est appelé que lorsque post est supprimé de force. Et pas quand c'est juste envoyé à la poubelle. Par défaut juste
wp_delete_post($postid)
envoie le message à la corbeille. Parce que l'indicateur $ force_delete par défaut est false. Donc, vous devez forcer la suppression en définissant le drapeau sur true:
wp_delete_post( $postid, true);