I want to say that the above answer worked for me, but I needed to make some slight adjustments to the if statement. I also made an adjustment to work like... if the post category is a parent, display the children if the post category is a parent but has no children, display posts <?php $cat_id = get_query_var('cat'); if( ! empty( $cat_id ) ) { $category = get_category( $cat_id, ARRAY_A ); if( ! empty( $category ) ) { //get child cats $terms = get_term_children( $cat_id, 'category' ); // parent category if( $category['parent'] == '0' and $terms[0] != '') { foreach( $terms as $term_id ) { $child_category = get_term( $term_id, 'category' ); // if you need the category $category_name = $child_category->name; /** * Sample data in your child category object: * * object(stdClass)[365] public 'term_id' => string '14' (length=2) public 'name' => string 'Child 1' (length=7) public 'slug' => string 'child-1' (length=7) public 'term_group' => string '0' (length=1) public 'term_taxonomy_id' => string '14' (length=2) public 'taxonomy' => string 'category' (length=8) public 'description' => string '' (length=0) public 'parent' => string '12' (length=2) public 'count' => string '5' (length=1) public 'object_id' => string '33' (length=2) * * */ // do whatever you like with the categories now... } } else { // in child category // do the regular loop here, if ( have_posts() ) ... } } }