нужно использовать рекурсивную функцию:
функция принимает два параметра: $parent_id - идентификатор родительской категории, и $level - уровень вложенности текущей категории. Если передать $parent_id равным 0, то будут выведены все верхнеуровневые категории. Функция использует get_categories() для получения списка дочерних категорий и рекурсивно вызывает саму себя для вывода вложенных категорий
function get_child_category_list( $parent_id, $level = 0 ) {
$args = array(
'hierarchical' => 1,
'show_option_none' => '',
'hide_empty' => 0,
'parent' => $parent_id,
'taxonomy' => 'product_cat'
);
$subcategories = get_categories( $args );
if ( $subcategories ) {
$output = '<ul class="subcategories level-' . $level . '">';
foreach ( $subcategories as $category ) {
$output .= '<li>';
$output .= '<a href="' . get_term_link( $category ) . '">' . $category->name . '</a>';
$output .= get_child_category_list( $category->term_id, $level + 1 );
$output .= '</li>';
}
$output .= '</ul>';
return $output;
} else {
return '';
}
}
вызвать в шаблоне попробуйте так:
if ( is_product_category() ) {
$parent_id = get_queried_object_id();
echo get_child_category_list( $parent_id );
}