Il se trouve donc que j'avais besoin de quelque chose comme ça pour un projet sur lequel je travaille. J'ai simplement écrit une requête pour sélectionner tous les messages d'un type personnalisé, puis je vérifie quels sont les termes réels de ma taxonomie qu'ils utilisent.
Ensuite, j'ai obtenu tous les termes de cette taxonomie en utilisant get_terms(), puis j'ai utilisé uniquement ceux qui figuraient dans les deux listes, je l'ai enveloppé dans une fonction et j'ai terminé.
Mais ensuite, j'avais besoin de plus que des ID: j'avais besoin des noms, j'ai donc ajouté un nouvel argument nommé $fieldspour pouvoir dire à la fonction quoi renvoyer. Ensuite, je me suis dit que cela get_termsacceptait de nombreux arguments et ma fonction se limitait à des termes utilisés par un type de message, j'ai donc ajouté une autre ifdéclaration et c'est parti:
La fonction:
/* get terms limited to post type 
 @ $taxonomies - (string|array) (required) The taxonomies to retrieve terms from. 
 @ $args  -  (string|array) all Possible Arguments of get_terms http://codex.wordpress.org/Function_Reference/get_terms
 @ $post_type - (string|array) of post types to limit the terms to
 @ $fields - (string) What to return (default all) accepts ID,name,all,get_terms. 
 if you want to use get_terms arguments then $fields must be set to 'get_terms'
*/
function get_terms_by_post_type($taxonomies,$args,$post_type,$fields = 'all'){
    $args = array(
        'post_type' => (array)$post_type,
        'posts_per_page' => -1
    );
    $the_query = new WP_Query( $args );
    $terms = array();
    while ($the_query->have_posts()){
        $the_query->the_post();
        $curent_terms = wp_get_object_terms( $post->ID, $taxonomy);
        foreach ($curent_terms as $t){
          //avoid duplicates
            if (!in_array($t,$terms)){
                $terms[] = $c;
            }
        }
    }
    wp_reset_query();
    //return array of term objects
    if ($fields == "all")
        return $terms;
    //return array of term ID's
    if ($fields == "ID"){
        foreach ($terms as $t){
            $re[] = $t->term_id;
        }
        return $re;
    }
    //return array of term names
    if ($fields == "name"){
        foreach ($terms as $t){
            $re[] = $t->name;
        }
        return $re;
    }
    // get terms with get_terms arguments
    if ($fields == "get_terms"){
        $terms2 = get_terms( $taxonomies, $args );
        foreach ($terms as $t){
            if (in_array($t,$terms2)){
                $re[] = $t;
            }
        }
        return $re;
    }
}
Usage:
Si vous n'avez besoin que d'une liste d'ID de termes, alors:
$terms = get_terms_by_post_type('tag','','snippet','ID');
Si vous avez seulement besoin d'une liste de noms de termes, alors:
$terms = get_terms_by_post_type('tag','','snippet','name');
Si vous n'avez besoin que d'une liste d'objets de termes, alors:
$terms = get_terms_by_post_type('tag','','snippet');
Et si vous avez besoin d'utiliser des arguments supplémentaires de get_terms comme: orderby, order, hierarchical ...
$args = array('orderby' => 'count', 'order' => 'DESC',  'hide_empty' => 1);
$terms = get_terms_by_post_type('tag',$args,'snippet','get_terms');
Prendre plaisir!
Mise à jour:
Pour fixer le nombre de termes à une modification de type de publication spécifique:
foreach ($current_terms as $t){
          //avoid duplicates
            if (!in_array($t,$terms)){
                $terms[] = $t;
            }
        }
à:
foreach ($current_terms as $t){
    //avoid duplicates
    if (!in_array($t,$terms)){
        $t->count = 1;
        $terms[] = $t;
    }else{
        $key = array_search($t, $terms);
        $terms[$key]->count = $terms[$key]->count + 1;
    }
}