admin管理员组

文章数量:1406063

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

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;    }}
Share Improve this question asked Oct 2, 2013 at 14:51 Andrew SmartAndrew Smart 1311 silver badge2 bronze badges
Add a comment  | 

2 Answers 2

Reset to default 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.

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

本文标签: functionsAdd body class of category parent