web-dev-qa-db-ja.com

投稿を完全に削除する必要がある場合にのみ関数をフックする方法は?

データベースから投稿を完全に削除するときにだけ関数をフックする必要があります。'before_delete_post 'フックを試しましたが、ゴミ箱に置かれたときと永久に削除されたときの両方で呼び出されます。

Wp_delete_post()関数はwp_trash_post()を呼び出して処理を停止しますが、投稿がゴミ箱に捨てられた後にwp_delete_post()が再度呼び出されたように見えます。

私はこの質問を見ました: wp_delete_post関数を持つWordpressの削除フック? 。私の必要性はまさにその逆です。

1
romulodl

問題は、自然なWPフローを誤動作していた "Sitewide tags"プラグインでした。 sitewide_tags_post_delete()という関数が 'trash_post'にフックされていて、メインブログの投稿を削除するためにwp_delete_post()を呼び出しています。

@スティーブンのアプローチに従って、私はこれをしました:

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は投稿がゴミ箱に捨てられたときには呼び出されません。

wp_delete_post()は投稿を捨てることができますが(投稿が捨てられず、強制的に削除されない場合):wp_trash_post()を呼び出し、アクションbefore_delete_postを起動する前に関数を終了することでそうします。

私はこれをテストしました。次の関数はあなたが完全に投稿を削除したときにのみ '死ぬ'ことになりますが、それがゴミに限定されたときにはそうではありません。 wp_dieは電話がかかってきていることを示すためのものです - ライブサイトでは使用しないことをお勧めします。

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

wp_delete_post()関数はここで見つけることができます (WP 3.3.1)

6
Stephen Harris