Assuming you have only two levels of categories, you could first retrieve the parent category and then list the child categories. Furthermore, calling get_children
and wp_list_categories
uses more resources than necessary, using only wp_list_categories
would suffice. I’ve explained my answer in the following snippet that should behave exactly as you need it to!
$category_id = get_query_var( 'cat' ); // Get current catgory ID
$category = get_term( $category_id, 'category' ); // Fetch category term object
// Now, we check if the category has a parent
// If it has, we use that ID
// If it doesn't have a parent, it is a parent category itself and we use its own ID
$parent = $category->parent ? $category->parent : $category_id;
$args = array(
'show_count' => false,
'hide_empty' => false,
'title_li' => '',
'show_option_none' => '',
'echo' => false
);
// Show the children of parent category
if ( $category->parent ) {
$args['child_of'] = $category->parent;
$args['exclude'] = $category_id; // Don't display the current category in this list
}
else {
$args['child_of'] = $category_id;
}
// Get the category list
$categories_list = wp_list_categories( $args );
if ( $categories_list ) {
?>
<div class="category-wrapper">
<ul class="child-categories">
<?php echo $categories_list; ?>
</ul>
</div>
<?php
}