I will show you how to display a list of categories in WordPress and also mark the active category, see code below:
<?php // Get the current queried object $term = get_queried_object(); $term_id = ( isset( $term->term_id ) ) ? (int) $term->term_id : 0; $categories = get_categories( array( 'taxonomy' => 'category', // Taxonomy to retrieve terms for. We want 'category'. Note that this parameter is default to 'category', so you can omit it 'orderby' => 'name', 'parent' => 0, 'hide_empty' => 0, // change to 1 to hide categores not having a single post ) ); ?> <ul> <?php foreach ( $categories as $category ) { $cat_ID = (int) $category->term_id; $category_name = $category->name; // When viewing a particular category, give it an [active] class $cat_class = ( $cat_ID == $term_id ) ? 'active' : 'not-active'; // I don't like showing the [uncategoirzed] category if ( strtolower( $category_name ) != 'uncategorized' ) { printf( '%3$s', esc_attr( $cat_class ), esc_url( get_category_link( $category->term_id ) ), esc_html( $category->name ) ); } } ?> </ul>
Notes about the code above:
get_queried_object() retrieve the currently-queried object. For example:
- if you’re on a single post, it will return the post object
- if you’re on a page, it will return the page object
- if you’re on an archive page, it will return the post type object
- if you’re on a category archive, it will return the category object
- if you’re on an author archive, it will return the author object
- etc.
But there are some implications when using get_queried_object()
, you should not expect it to return a post type object even when is_post_type_archive() is true. Check it out for more info.
Also, note that get_queried_object()
is a wrapper for $wp_query->get_queried_object()
, so it returns a WP object data type.
get_categories()
get_categories() retrieve list of category objects. Currently accepts only one parameter – $args
. The $args parameter specifies a list of arguments that should be used to retrieve categories. See get_terms() for additional options.
However, to get the category for a particular posts here’s a simple function I wrote: How to get list of categories for a post