J'essaie de supprimer une catégorie si une autre catégorie est désactivée.
D'abord, j'ai une fonction qui ajoute la catégorie si une autre catégorie est définie, telle que:
function add_category_automatically($post_ID) {
global $wpdb;
if ( in_category('3152') ) {
$cat = array(1208);
wp_set_object_terms($post_ID, $cat, 'category', true);
}
}
add_action ('save_post', 'add_category_automatically');
Ceci ajoute la catégorie avec l'ID 1208 si l'article a la catégorie avec l'ID 3152.
Maintenant, j'ai besoin d'une fonction qui fait l'inverse exact, que si la catégorie avec l'ID 3152 est non définie, j'ai besoin de la fonction pour désactiver également la catégorie avec l'ID 1208.
Je comprends que je pourrais simplement faire quelque chose comme cela, mais cela va tout gâcher parce que je veux que l’utilisateur final puisse définir lui-même la catégorie avec l’ID 1208, il ne doit être supprimé que si la catégorie portant l’ID 3152 est supprimée.
function remove_category_automatically($post_ID) {
global $wpdb;
if ( !in_category('3152') ) {
$cat = array(1208);
wp_remove_object_terms($post_ID, $cat, 'category', true);
}
}
add_action ('save_post', 'remove_category_automatically');
Ainsi, ce code ci-dessus ne fonctionne pas car avec ce code, vous ne pouvez pas définir la catégorie 1208 par lui-même, il supprimera toujours 1208 sauf si 3152 est présent. Je souhaite que certains messages aient la catégorie 1208 sans avoir le chat 3152.
Alors j'essaie quelque chose comme ça mais ça ne marche pas vraiment.
function on_all_status_transitions( $new_status, $old_status, $post ) {
if ( in_category('3152') ) {
if ( $new_status != $old_status && has_category('3152') ) {
$cat = array(3152);
wp_remove_object_terms($post_ID, $cat, 'category', true);
}
}
}
add_action ('transition_post_status', 'on_all_status_transitions', 10, 3);
Toutes les idées pour résoudre ce problème seraient grandement appréciées.
Vous pouvez utiliser l'action deleted_term_relationships
pour vérifier si un terme est supprimé d'un objet de publication.
Ce hook est dans le wp_remove_object_terms()
function custom_remove_category( $object_id, $tt_ids, $taxonomy ) {
if( $taxonomy == 'category' ) {
if( in_array( 3152, $tt_ids ) ) {
wp_remove_object_terms( $object_id, [1208], 'category' );
}
}
return $object_id;
}
add_action( 'deleted_term_relationships', 'custom_remove_category', 10, 3 );