web-dev-qa-db-fra.com

Envoyer un courrier électronique lorsque la catégorie de type de publication personnalisée est modifiée

C'est la première fois que je tente d'écrire un hook d'action.

Mon CPT a 4 catégories. J'essaie de faire en sorte que WP envoie automatiquement une notification par courrier électronique lorsque la catégorie est modifiée.

Par changement, je veux dire: disons que le message a une catégorie de "cat1". L'administrateur désélectionne cat1 et sélectionne "cat2" puis clique sur le bouton "Mettre à jour". Je ne parle pas d’écraser ou d’ajouter de nouvelles catégories à la liste.

Mon code jusqu'ici:

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

L’idée étant ici que l’auteur recevra un email les informant que leur publication a été modifiée de cat1 à cat2.

Le code ci-dessus fonctionne dans le sens où il envoie un email lorsque je clique sur "Mettre à jour". Cependant, le problème est que cela envoie un email, peu importe ce que je fais. Chaque fois que je clique sur "Mettre à jour", que quelque chose ait changé ou non, cela envoie le courrier électronique.

Je pensais que set_object_terms ne se déclencherait que si la catégorie était changée. Évidemment, il me manque un concept important ici. Quelqu'un peut-il aider?

3
danzo

Utilisez les hooks added_term_relationship et deleted_term_relationships. Ceux-ci ne se déclenchent que lorsque la relation change, par opposition à set_object_terms qui se déclenche toujours:

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