In this example I needed to be able to get a list of taxonomy terms used in a specific post type, with the taxonomy crossing between post types…but I only wanted to return terms used in that specific post type. By default WordPress will return all terms used in ANY post type. So I put together this little function that returns a list of term IDs without any posts associated in the custom post type…so then I can used that as my exclude list when querying the taxonomy.
function cpt_taxonomy_excludes($custom_taxonomy, $post_type) {
$exclude = array();
foreach (get_terms($custom_taxonomy) as $term) {
$posts = get_posts(
array(
'post_type' => $post_type,
'tax_query' => array(
array(
'taxonomy' => $custom_taxonomy,
'field' => 'id',
'terms' => $term->term_id
)
)
)
);
if (empty($posts)){
$exclude[] = $term->term_id;
}
}
return $exclude;
}