Here, like Tom does well, I am just noting some code thinking in case it gets fuzzy later.
Maybe this is an edge case that almost no one will face. A project I am working on now has custom post types I inject via the handy plugin. As it turns out, maybe for the theme I am trying, when displayed, it does not show any of the taxonomies it is associated with. A theme of course could not anticipate what I am doing,
Normally, this is something one puts into a custom theme template; often a theme has some kind of “get post meta” function built in leveraging the function get_the_term_list().
But in the project I am fleshing out, I am not formatting output as theme-templates, but user configurable ones they edit as content blocks (with placeholders populated by shortcodes).
I searched in vain for some plugins that would offer a shortcode that might then output the taxonomy a post/content type belonged to. It might be out there, so I came up shy.
So here is where I rolled up my sleeves… no they were already rolled, but wrote my own shortcode functions, which can go into a plugin or just added to a site with the Code Snippets plugin. My goal is here is something independent of the theme itself.
First is a [taxlist] a shortcode for displaying the category-like taxonomy a post belongs to, producing an HTML ordered list of the taxonomies with links to view their archives. It offers optional parameters:
taxonomy
– the slug name for a custom taxonomy; default iscategory
id
– optional if used on a different context than within a given post to target a specific content item (I did not need this but thought it useful). Defaults to the item in viewlist_type
– it might be useful sometimes to have an ordered HTML list, default isul
class
– optional CSS class name for formatting purposesdescription
– whether to include the taxonomy description or not
// shortcode to get an HTML list of taxonomy terms for a given post ID
add_shortcode("taxlist", "mytools_taxlist");
function mytools_taxlist( $atts ) {
extract(shortcode_atts( array(
"taxonomy" => 'category',
"id" => get_the_id(),
"list_type" => 'ul',
"class" => 'taxlist',
"description" => false
), $atts ));
$terms = get_the_terms( $id, $taxonomy);
if ( ! empty( $terms ) && !is_wp_error( $terms ) ) {
$output = '<' . $list_type . '" class="' . $class . ' ">';
foreach ($terms as $term) {
$descrip = ( $description && !(empty($term->description) ) ) ? ' - ' . $term->description . '' : '';
$output .= '
I made a second function for a case where the taxonomy is more like tags, and the display is like a single line string, separated by default, commas. This ends up being almost a direct path to the built in function.
// shortcode to get something like a comma separated list of terms (e.g. for tags) for a given post ID add_shortcode("taxstring", "mytools_taxstring"); function mytools_taxstring( $atts ) { extract(shortcode_atts( array( "taxonomy" => 'category', "id" => get_the_id(), "before" => '', "sep" => ', ', "after" => '' ), $atts )); $terms = get_the_term_list( $id, $taxonomy, $before, $sep, $after ); return ($terms); }
Again, this could be of little use to anyone, but what I so enjoy about WordPress is often I can find plugins to do what I need, if not there is likely custom code swimming out there in StackExchange (ir blogs, those old time things), and if that fails, I can cobble my own.
And that all feels like my kind of space to build in.
Image Credits: When thinking of this post, my associative brain cells went to the old “What’s My Line?” TV show. The Wikimedia Commons image was perfect- Whats My Line original television panel 1952.JPG licensed as public domain with some long legged reasoning (age, lack of copyright, probably contestable, sue us all). I Photoshopped in the change of Line
to Taxonomy
, shoving wood around behind it, and changed the name labels. I may have spent more time futzing on the image than writing the post, both of which took longer than writing the code.

I will definitely have a reason to use this in the future. Now I must store it in my brain so I don’t rebuild any wheels.