web-dev-qa-db-ja.com

カスタム投稿タイプカテゴリが変更されたときにメールを送信する

私がアクションフックを書き込もうとしたのは今回が初めてです。

私のCPTには4つのカテゴリがあります。カテゴリが変更されたときにWPが自動的にEメール通知を送信するようにしています。

変更により、私の言う意味:投稿のカテゴリが "cat1"であるとしましょう。管理者はcat1の選択を解除して "cat2"を選択してから "Update"ボタンをクリックします。上書きや新しいカテゴリをリストに追加することについては話していません。

私のコードはこれまでのところ:

add_action('set_object_terms','email_when_category_changes');

function email_when_category_changes(){
       wp_mail( '[email protected]', 'Update on CI board', 'the category changed' );
}

ここでのアイデアは、投稿者が自分の投稿がcat1からcat2に変更されたことを通知する電子メールを作者が受け取ることです。

上記のコードは、[更新]をクリックしたときに電子メールを送信するという意味で機能します。しかし、問題はそれが私が何をしても関係なく電子メールを送るということです。変更があってもなくても、[更新]をクリックするたびに電子メールが送信されます。

Set_object_termsはカテゴリが変更された場合にのみ起動すると思いました。明らかに私はここで重要な概念を見逃しています。誰も手伝ってくれる?

3
danzo

フックadded_term_relationshipdeleted_term_relationshipsを使用してください。これらは、常に発生するset_object_termsとは対照的に、関係が変化したときにのみ発生します。

function wpse_181090_object_terms_updated( $object_id ) {
    static $did = array(); // This function might fire multiple times for the same object, ensure it only runs once

    if ( ! isset( $did[ $object_id ] ) ) {
        $did[ $object_id ] = true;

        // Your notification code
    }
}

add_action( 'deleted_term_relationships', 'wpse_181090_object_terms_updated' );
add_action( 'added_term_relationship',    'wpse_181090_object_terms_updated' );
3
TheDeadMedic