1

I am using wp_list_categories to display all terms of my custom taxonomy 'categories'.

The function is outputting all my terms successfully but the current category is not being highlighted, even though 'current_category' is set to 1 in my arguments.

The function is being outputted on taxonomy-categories.php, following the naming convention of my taxonomy categories.

It is not inside a loop, could that be why?

UPDATE, here is my function:

$args = array(
    'orderby'               => 'term_group',
    'title_li'              =>  NULL,
    'order'                 => 'ASC',
    'hide_empty'            => 1,
    'use_desc_for_title'    => 0,
    'feed'                  => '',
    'hierarchical'          => 1,
    'echo'                  => 1,
    'current_category'      => 1,
    'taxonomy'              => 'categories'
);
echo wp_list_categories($args);

Note: this works on my single-{post-type}.php template, but does not function on my taxonomy-{taxonomy}.php template.

2
  • You don't need to echo wp_list_categories($args) if you set the echo key to true. I would also try removing the current_category key entirely to see if that helps. It should by default, on the taxonomy template page display the current term from my understanding of it. Finally, the wp_list_categories() can be used anywhere be it inside or outside the loop.
    – Howdy_McGee
    Nov 11 '13 at 17:06
  • Bingo! You are right. Thank you. I never thought about the echo in my arguments. Nov 11 '13 at 17:14
1

This will add a current-cat class to any / all categories connected to the post, not jut one.

Add this to functions.php

function tax_cat_active( $output, $args ) {

  if(is_single()){
    global $post;

    $terms = get_the_terms( $post->ID, $args['taxonomy'] );
    foreach( $terms as $term )
        if ( preg_match( '#cat-item-' . $term ->term_id . '#', $output ) )
            $output = str_replace('cat-item-'.$term ->term_id, 'cat-item-'.$term ->term_id . ' current-cat', $output);
  }

  return $output;
}
add_filter( 'wp_list_categories', 'tax_cat_active', 10, 2 );
4
  • This works perfectly on my single-{post-type}.php template. However I just realised it does not work on my taxonomy-{taxonomy}.php template. How can I get the same functionality on the taxonomy template? Nov 11 '13 at 12:49
  • For @Howdy_McGee Nov 11 '13 at 14:21
  • Could you post your wp_list_categories() code? It should have this functionality by default.
    – Howdy_McGee
    Nov 11 '13 at 14:47
  • I have updated the question with my code. Nov 11 '13 at 16:36
4

The answer provided by Howdy_McGee produced a PHP notice for me that prevented it from working correctly. I changed $terms = get_the_terms( $post->ID, $args['taxonomy'] ); to $terms = get_the_terms( $post->ID, 'taxonomy' ); I also added a check that the post has terms associated with it to suppress additional PHP warnings if $terms is empty.

function tax_cat_active($output, $args) {
    if (is_single()) {
        global $post;
        $terms = get_the_terms($post->ID, 'category');
        if (!empty($terms)) {
            foreach( $terms as $term )
                if ( preg_match( '#cat-item-' . $term ->term_id . '#', $output ) )
                    $output = str_replace('cat-item-'.$term ->term_id, 'cat-item-'.$term ->term_id . ' current-cat', $output);
        }
    }
    return $output;
}
add_filter('wp_list_categories', 'tax_cat_active', 10, 2); 
1
  • +1 for corrections, and for those who want to use it: add in style.css (in your theme template folder) li.cat-item.cat-item-12.current-cat a{font-size: 1.5em;font-style: italic;} (where 12 is the Category ID which you need to change to correct ID and the style to own wishes) Remember that you have to add as many style lines as you have categories (with correct cat ID ofcourse)
    – Charles
    Sep 14 '16 at 0:25

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.