3

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;    }}
5

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.

| improve this answer | |
  • How does this fit in with the original snippet? – Pete Nov 10 '19 at 9:33
0

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;
        }
?> 
| improve this answer | |

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.