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


9

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

add_action('deleted_post', 'emailUser');

または

add_action('delete_post', 'emailUser');

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

更新:ゴミ箱の投稿を使用して機能させる

add_action('trash_post', 'emailUser');

しかし、関数の二重実行の問題はまだ残っています。。。


1
以下の解決策を書き、回答としてマークしてください
Ashfame

関数の二重実行がまだあるので、それは適切な答えではありません...
Harjeet Singh

回答:


10

これでうまくいきます!

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など


2

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

関数は、名前に投稿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 );
   }

}

うまくいくかどうか教えてください!


あなたは、データベースからオプションを削除することを心配する必要はありませんので、あなたの代わりにオプションの過渡APIを使用することができますcodex.wordpress.org/Transients_API
Bainternet

素晴らしい働きをしたサイモンに感謝します。。。。なぜこれを逃したのか、わからない。。..
Harjeet Singh 2011

Bainternet、私は一時的なものを見ました、そしてそれらは私の場合のget_optionにかなり似ています、そして実行はサーバーのパフォーマンスにも依存し、削除の前後のコード実行時間の計算に依存するので、私も削除のget_optionに固執します投稿が難しくなる場合があります。
Harjeet Singh 2011

オプションフィールドやトランジェントの追加/編集を開始したり、クエリを追加したりする必要はまったくありません。代わりに、did_actionを呼び出して、フックがすでに発生しているかどうかを確認します。
トムJノーウェル

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

上記のフックはWP 4.7.5では機能しませんでした。

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

add_action('wp_trash_post', 'trash_post_function_name');
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.