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; }}
2 Answers
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.