I was surprised to learn that custom taxonomies aren’t added as body or post classes like categories and tags are.
I’m sure this will be added in a future version of WordPress, but in the meantime I need to add a custom taxonomy to the post class so that I can style post in a certain category in that taxonomy differently.
It’d be most elegant to filter the post class and add the taxonomies to it. I found a snippet to pull off a similar trick with the body class, but I haven’t been successful in adapting it:
function wpprogrammer_post_name_in_body_class( $classes ){
if( is_singular() )
{
global $post;
array_push( $classes, "{$post->post_type}-{$post->post_name}" );
}
return $classes;
}
add_filter( 'body_class', 'wpprogrammer_post_name_in_body_class' );
A bit more crudely, I thought about using the_terms function to create my own classes for the custom posts, something like this:
<div class="<?php the_terms( $post->ID, 'taxonomy', '', ' ', '' ); ?>"></div>
But then I’d have to filter out the HTML that the_term
generates.
Am I missing anything obvious here, is there a simpler way to solve this issue?
I found a snippet of code courtesy of mfields that solved this problem for me, here’s what I ended up using:
Update: As of WordPress 4.2-alpha-31271 (23 January 2015), CSS classes for custom taxonomy terms are now automatically added by WordPress core when using
get_post_class()
.The following code snippet is no longer necessary.
Here’s a good utility function that will add all registered, public taxonomy terms to the
post_class()
for use as CSS hooks in themes:Inspiration and credit from Jan Fabry’s previous answer.
Put the above code in your theme’s
functions.php
file. Then, whenever thepost_class()
is used in a template:It will output any public custom taxonomy term(s) attached to the post, in addition to all of the default post classes. For example:
It handily works with Custom Post Types and Taxonomies.
I have an improvement on @rjb’s answer (I don’t have enough reputation to comment, sorry). I was getting an “array to strings conversion” error with debug mode turned on, so I did a foreach loop of the returned taxonomies and now there’s no error.
Hope this helps someone!
Instead of
the_terms
, you could useget_the_terms
, which will return the taxonomy term objects. The Codex has documentation for the tag-only version,get_the_tags
.That would give you something like this:
I did some coding and I add support of post class, to my plugin called: Custom post types and taxonomies manager
In new taxonomy form is option called Post class. Which allows to add category|tag-{slug} and {slug}-{tax_value_slug} to the post class.
Download here
https://github.com/Pravdomil/wp-custom-post-types-man/archive/master.zip