web-dev-qa-db-ja.com

投稿がゴミ箱に移動されたときに実行される関数。 

こんにちは、投稿がゴミ箱に移動されている間に実行できるアクションがあります。私はdelete_postとdeleted_postを試してみました。 (codexで書かれたようにアクションの前後に)各アクションに対して2回動作しますが、投稿はゴミ箱から削除されたときにのみ表示されます。例私は、何らかの理由で自分の投稿がゴミ箱に移動されたことを記載した電子メールを作者に送信し、user_metaを更新するとします。私が使うなら

add_action('deleted_post', 'emailUser');

または

add_action('delete_post', 'emailUser');

投稿がゴミ箱から削除された場合にのみ機能します。 。 。

更新: /を使ってゴミ箱への投稿に使えるようにした

add_action('trash_post', 'emailUser');

しかし、関数の二重実行の問題はまだあります。 。 。

9
Harjeet Singh

これでうまくいきます!

add_action('trash_post','my_trash_post_function',1,1);
function my_trash_post_function($post_id){
    if(!did_action('trash_post')){
        // do stuff
    }
}

ここで関数を追加し、did_actionを使用してフックが複数回実行されるのを防ぎます。

http://codex.wordpress.org/Function_Reference/did_action

いつものように、これらの種類のフックは{post_status}_{post_type}という形式をとるので、trash_posttrash_pagetrash_customposttypepublish_pageなどの形式を取ります。

10
Tom J Nowell

このアクションは、投稿がゴミ箱に移動されたときに一度呼び出され、次にゴミ箱が空になったときにもう一度呼び出されます。

あなたの機能は名前にポストIDを持つオプションの存在をチェックすることができます、オプションがそこにないならそれはそれから電子メールを送り、そしてオプションを設定します。オプションがある場合(たとえば、2度目に呼び出されている場合)、電子メールは送信されません。

データベースを選択してもいっぱいにならないように、オプションを削除してください。

add_action( 'delete_post', 'emailUser' );

function emailUser( $postid ) {

   if ( ! get_option( 'user_emailed_' . $postid ) ) {
      // send email here
      update_option( 'user_emailed_' . $postid, 'anything' );
   } else {
      delete_option( 'user_emailed_' . $postid );
   }

}

それがうまくいくかどうか私に教えてください!

2
add_action('trash_post', 'trash_post_function_name');

上記のフックはWP 4.7.5ではうまくいきませんでした。

これは私のために働いたものです

add_action('wp_trash_post', 'trash_post_function_name');