web-dev-qa-db-fra.com

Création/suppression dynamique de termes dans la taxonomie lorsque le type de publication est personnalisé

Je lutte un peu avec la création et la suppression de termes en fonction du type de publication personnalisé publié et supprimé. Idéalement, j'aimerais créer un nouveau terme dans ma taxonomie personnalisée lorsqu'un type de publication personnalisé est publié. Ensuite, lorsque cette publication dans le type de publication personnalisée est mise à la corbeille, je dois vérifier et m'assurer que le compte de ce terme est égal à 0 et, le cas échéant, supprimer automatiquement le terme approprié. Voici ce que j'ai jusqu'à présent. La fonction de création fonctionne correctement, mais je ne parviens pas à comprendre la fonction supprimée. Votre expertise est très appréciée !!

<?php
/**
  * Automatically creates terms in 'custom_taxonomy' when a new post is added to its 'custom_post_type'
  */
function add_cpt_term($post_ID) {
    $post = get_post($post_ID);

    if (!term_exists($post->post_name, 'custom_taxonomy'))
        wp_insert_term($post->post_title, 'custom_taxonomy', array('slug' => $post->post_name));
}
add_action('publish_{custom_post_type}', 'add_cpt_term');
?>

... et maintenant, pour la fonction, j'ai du mal à me mettre au travail comme je le souhaite:

/**
  * Automatically removes term in 'custom_taxonomy' when the post of 'custom_post_type' is trashed
  */
function remove_cpt_term($post_ID) {
    $post = get_post($post_ID);
    $term = get_term_by('name', $post->post_name, 'custom_taxonomy', 'ARRAY_A');

    if ($post->post_type == 'custom_post_type' && $term['count'] == 0)
        wp_delete_term($term['term_id'], 'custom_taxonomy');
}
add_action('wp_trash_post', 'remove_cpt_term');
?>
1
kaffolder

Ok, je pense avoir trouvé une solution viable. Je suis un peu déçu du fait qu’il m’ait été impossible jusqu’à présent d’accrocher directement dans trash_{custom_post_type} comme j’ai pu le faire avec le hook publish_{custom_post_type}. Voici une solution pour toute autre personne aux prises avec ce problème. Si quelqu'un a de meilleures suggestions, n'hésitez pas à les partager!

/**
  * Automatically removes term in 'custom_taxonomy' when the post of 'custom_post_type' is trashed
  */
function remove_cpt_term($post_ID) {
    $post = get_post($post_ID);
    $term = get_term_by('slug', $post->post_name, 'custom_taxonomy');

    // target only our custom post type && if no posts are assigned to the term
    if ('custom_post_type' == $post->post_type && $term->count == 0)
        wp_delete_term($term->term_id, 'custom_taxonomy');
}
add_action('wp_trash_post', 'remove_cpt_term');
3
kaffolder