1

I have this in my category.php to show sub-subcategories:

<?php if (is_category()) {
  $this_category = get_category($cat);
  if (get_category_children($this_category->cat_ID) != "") {
    echo "<ul>";
    wp_list_categories('orderby=id&show_count=0&title_li=
&use_desc_for_title=1&child_of='.$this_category->cat_ID);
    echo "</ul>";
  }
}?>

<ul>    
<li class="cat-item cat-item-5">
<a>subcategory</a>
    <ul class="children">
    <li class="cat-item cat-item-6"><a>sub-subcategory1</a></li>
    <li class="cat-item cat-item-7"><a>sub-subcategory2</a></li>
    </ul>
</li>
</ul>

Is it possible to add a class with the sub-subcategory name?

    <li class="cat-item cat-item-6 sub-subcategory1"><a>sub-subcategory1</a></li>
5

Yes, it is possible. wp_list_categories accepts a (custom) walker that may handle this.

Put the following in your functions.php file:

class Custom_Walker_Category extends Walker_Category {

        function start_el( &$output, $category, $depth = 0, $args = array(), $id = 0 ) {
                extract($args);
                $cat_name = esc_attr( $category->name );
                $cat_name = apply_filters( 'list_cats', $cat_name, $category );
                $link = '<a href="' . esc_url( get_term_link($category) ) . '" ';
                if ( $use_desc_for_title == 0 || empty($category->description) )
                        $link .= 'title="' . esc_attr( sprintf(__( 'View all posts filed under %s' ), $cat_name) ) . '"';
                else
                        $link .= 'title="' . esc_attr( strip_tags( apply_filters( 'category_description', $category->description, $category ) ) ) . '"';
                $link .= '>';
                $link .= $cat_name . '</a>';
                if ( !empty($feed_image) || !empty($feed) ) {
                        $link .= ' ';
                        if ( empty($feed_image) )
                                $link .= '(';
                        $link .= '<a href="' . esc_url( get_term_feed_link( $category->term_id, $category->taxonomy, $feed_type ) ) . '"';
                        if ( empty($feed) ) {
                                $alt = ' alt="' . sprintf(__( 'Feed for all posts filed under %s' ), $cat_name ) . '"';
                        } else {
                                $title = ' title="' . $feed . '"';
                                $alt = ' alt="' . $feed . '"';
                                $name = $feed;
                                $link .= $title;
                        }
                        $link .= '>';
                        if ( empty($feed_image) )
                                $link .= $name;
                        else
                                $link .= "<img src='$feed_image'$alt$title" . ' />';
                        $link .= '</a>';
                        if ( empty($feed_image) )
                                $link .= ')';
                }
                if ( !empty($show_count) )
                        $link .= ' (' . intval($category->count) . ')';
                if ( 'list' == $args['style'] ) {
                        $output .= "\t<li";
                        $class = 'cat-item cat-item-' . $category->term_id;


                        // YOUR CUSTOM CLASS
                        if ($depth)
                            $class .= ' sub-'.sanitize_title_with_dashes($category->name);


                        if ( !empty($current_category) ) {
                                $_current_category = get_term( $current_category, $category->taxonomy );
                                if ( $category->term_id == $current_category )
                                        $class .=  ' current-cat';
                                elseif ( $category->term_id == $_current_category->parent )
                                        $class .=  ' current-cat-parent';
                        }
                        $output .=  ' class="' . $class . '"';
                        $output .= ">$link\n";
                } else {
                        $output .= "\t$link<br />\n";
                }
        } // function start_el

} // class Custom_Walker_Category

Then, change your code in category.php like so:

if (is_category()) {
    $this_category = get_category($cat);
    if ('' != get_category_children($this_category->cat_ID)) {
        echo '<ul>';
        $args = array(
            'orderby' => 'id',
            'show_count' => 0,
            'title_li' => '',
            'use_desc_for_title' => 1,
            'child_of' => $this_category->cat_ID,
            'walker' => new Custom_Walker_Category(),
        );
        wp_list_categories($args);
        echo '</ul>';
    }
}
0

I know that this question is old, but I found another solution that seems to be simpler than a custom walker, and wanted to post it for anyone else looking for a solution. You can use the category_css_class filter.

add_filter( 'category_css_class', 'add_category_slug_as_class', 10, 4);

public static function add_category_slug_as_class($css_classes, $category, $depth, $args) {
    $css_classes[] = $category->slug;
    return $css_classes;
}
New contributor
Brady Charron is a new contributor to this site. Take care in asking for clarification, commenting, and answering. Check out our Code of Conduct.

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.