I am trying to add the parent category class in post_class() of some posts from one of my subcatgories. I have an advanved theme so I need to style all the posts from the parent cateogry using it's class, not the subcategory class (too much hassle in CSS).


Perhaps something like:

function mytheme_get_post_class_parent_cats() {
    $parent_cat_classes = array();
    // Get parent categories
    $post_cats = wp_get_post_categories();
    // Loop through post categories
    foreach ( $post_cats as $post_cat ) {
        $cat_parents = get_category_parents( $post_cat , false, ',', true );
        // if there are any parent categories
        if ( $cat_parents ) {
            // create an array
            $cat_array = explode( $cat_parents, ',' );
            // First key of the array is the top-level category parent
            $parent_cat_id = $cat_array[0];
            // Get the name of the top-level parent category
            $parent_cat = get_cat_name( $parent_cat_id );
            // create the CSS class .category-parent-{categoryname}
            $parent_cat_classes[] = 'category-parent-' . $parent_cat;
        } else {
            // Otherwise, the category is a top-level cat, so use it
            $cat_name = get_cat_name( $post_cat );
            $parent_cat_classes[] = 'category-parent-' . $cat_name;
    // Return CSS class, or false
    return $parent_cat_classes;

Then, when you call post_class():

<?php post_class( mytheme_get_post_class_parent_cats() ); ?>
  • There seems to be a problem with your function, it's not working o_O – rats Jul 17 '11 at 21:19
  • It's example code for implementing the two referenced functions. Can you provide more detail? What's not working. – Chip Bennett Jul 17 '11 at 21:22
  • as this is for a post, the function should loop through the post's categories: codex.wordpress.org/Function_Reference/wp_get_post_categories – Michael Jul 17 '11 at 21:30
  • Okay, see updates. Added parameters to get_category_parents(), and added an explode() call to create the array from which to get the top-level parent category. – Chip Bennett Jul 17 '11 at 21:31
  • Oh, good call, @michael! Let me adjust things a bit... – Chip Bennett Jul 17 '11 at 21:34

A friend found the perfect solution, so I think it's fair to share it with you guys:

function rats_class($classes){
 global $post;
 return $classes;

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.