web-dev-qa-db-ja.com

Wp_delete_post関数でWordpressの削除フック?

私はこのアクション/フックを持っています:

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()が呼び出されると、アクションは機能しません。

アクションを削除機能と連携させるにはどうすればよいですか?

1
shammer

wp_delete_post()alwaysbefore_delete_postをトリガーします - 問題はあなたが条件付きであなたの関数をフックしているということです(すなわち常にではありません)。

before_delete_postのみは、実際に投稿を完全に削除した場合にトリガされます。単に削除するのではありません。

あなたもゴミを聞く必要があるなら、wp_trash_postを使ってください。

2
TheDeadMedic

使用法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);
1
Abir Pathak