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