Add body class of category parent

I am not a coder, but I usually get by with WordPress by doing my research and find my solution. I can’t find what I need to do this time so I have attempted to crib together some code – what I am attempting to do is, when I am on the Category Archive, I want to add a body class of the category parent. This is what I have tried and it is working apart from I am getting the parents category ID, but I want the slug/nicename:

add_filter('body_class','hw_custom_body_class');
  function hw_custom_body_class($classes){
  if(is_category()){
  $categories = get_the_category();
  $category = strtolower($categories[0]->category_parent);
  $classes[]='category-'.$category;
  return $classes;    }}

Related posts

2 comments

  1. Use get_ancestors() to get the parent terms. Here is an excerpt from my plugin T5 Parent Terms in body_class:

        $ancestors = get_ancestors(
            get_queried_object_id(),
            get_queried_object()->taxonomy
        );
    
        if ( empty ( $ancestors ) )
        {
            return $classes;
        }
    
        foreach ( $ancestors as $ancestor )
        {
            $term          = get_term( $ancestor, get_queried_object()->taxonomy );
            $new_classes[] = esc_attr( "parent-$term->taxonomy-$term->slug" );
        }
    

    This will work with any taxonomy, not just categories.

  2. The only way I got to display the parent category in the category’s archive page was by following this approach: https://yonkov.github.io/post/add-parent-category-to-the-body-class/

    Basically, you need to create a class variable and then pass it to the body class:

    <?php
        $this_category = get_category($cat);
        //If category is parent, list it
        if ($this_category->category_parent == 0) {
            $this_category->category_parent = $cat;
        } else { // If category is not parent, list parent category
            $parent_category = get_category($this_category->category_parent);
            //get the parent category id
            $ParentCatId = $parent_category->cat_ID;
            }
            $childcategories = array();
            $catx = $ParentCatId;
            $cats = get_categories('parent='.$catx);
            foreach($cats as $cat) {
                $childcategories[] = $cat->term_id; } ;
            //if it is a child category, add a class with the parent category id
            if( is_category( $childcategories ) ) {
                $class = 'parent-category-'.$ParentCatId;
            }
    ?> 
    

Comments are closed.