it-swarm.com.de

Senden Sie eine E-Mail, wenn die benutzerdefinierte Posttypkategorie geändert wird

Dies ist das erste Mal, dass ich versucht habe, einen Aktions-Hook zu schreiben.

Mein CPT hat 4 Kategorien. Ich versuche, dass WP automatisch eine E-Mail-Benachrichtigung sendet, wenn die Kategorie geändert wird.

Mit Änderung meine ich: Nehmen wir an, der Beitrag hat die Kategorie "cat1". Der Administrator wählt cat1 ab und wählt "cat2" und klickt dann auf die Schaltfläche "Aktualisieren". Ich spreche nicht über das Überschreiben oder Anhängen neuer Kategorien an die Liste.

Mein Code bisher:

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' );
}

Die Idee dabei ist, dass der Autor eine E-Mail erhält, die ihn benachrichtigt, dass sein Beitrag von cat1 in cat2 geändert wurde.

Der obige Code funktioniert in dem Sinne, dass er eine E-Mail sendet, wenn ich auf "Aktualisieren" klicke. Das Problem ist jedoch, dass es eine E-Mail sendet, egal was ich tue. Jedes Mal, wenn ich auf "Aktualisieren" klicke, wird die E-Mail gesendet, unabhängig davon, ob etwas geändert wurde oder nicht.

Ich dachte, set_object_terms würde nur ausgelöst, wenn die Kategorie geändert wurde. Offensichtlich fehlt mir hier ein wichtiges Konzept. Kann jemand helfen?

3
danzo

Verwenden Sie die Haken added_term_relationship und deleted_term_relationships. Diese werden nur ausgelöst, wenn sich die Beziehung ändert, im Gegensatz zu set_object_terms, der immer ausgelöst wird:

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