私はこのアクション/フックを持っています:
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());
}
}
上記から私が管理者から投稿を削除しているときにうまくいきます。ただし、wp_delete_post()が呼び出されると、アクションは機能しません。
アクションを削除機能と連携させるにはどうすればよいですか?
wp_delete_post()
alwaysはbefore_delete_post
をトリガーします - 問題はあなたが条件付きであなたの関数をフックしているということです(すなわち常にではありません)。
before_delete_post
のみは、実際に投稿を完全に削除した場合にトリガされます。単に削除するのではありません。
あなたもゴミを聞く必要があるなら、wp_trash_post
を使ってください。
使用法wp_delete_post:
wp_delete_post($postid, $force_delete = false)
'before_delete_post'フックはpostが強制削除されたときにのみ呼び出されます。それがゴミ箱に送られたばかりではありません。デフォルトでは
wp_delete_post($postid)
投稿をゴミ箱に送る。デフォルトの$ force_deleteフラグはfalseなので。そのため、フラグをtrueに設定して強制的に削除する必要があります。
wp_delete_post( $postid, true);