Ich habe diese Aktion/Haken:
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());
}
}
Das oben Genannte funktioniert hervorragend, wenn ich Posts vom Administrator lösche. Wenn jedoch wp_delete_post () aufgerufen wird, funktioniert die Aktion nicht.
Wie kann ich die Aktion mit der Löschfunktion ausführen?
wp_delete_post()
always löst before_delete_post
aus - das Problem muss sein, dass Sie Ihre Funktion bedingt einbinden (d. h. nicht immer).
before_delete_post
wird nur ausgelöst, wenn Sie den Beitrag tatsächlich dauerhaft löschen und nicht nur in den Papierkorb werfen.
Wenn Sie auch auf den Papierkorb achten müssen, verwenden Sie wp_trash_post
.
Verwendung wp_delete_post:
wp_delete_post($postid, $force_delete = false)
Der Haken 'before_delete_post' wird nur aufgerufen, wenn das Löschen des Beitrags erzwungen wird. Und nicht, wenn es nur in den Müll geschickt wird. Standardmäßig nur
wp_delete_post($postid)
schickt die Post in den Papierkorb. Weil das standardmäßige $ force_delete-Flag falsch ist. Sie müssen das Löschen erzwingen, indem Sie das Flag auf true setzen:
wp_delete_post( $postid, true);