Use array_slice and get the first 5 elements of the array:
<?php
$term_id =182;
$taxonomy_name="geram_category";
$term_children = get_term_children( $term_id, $taxonomy_name );
$term_children = array_slice( $term_children, 0, 5, true );
foreach ( $term_children as $child ) {
$term = get_term_by( 'id', $child, $taxonomy_name);
echo '<li><a href="' . get_term_link( $child, $taxonomy_name ) . '">' . $term->name . '</a></li>';
}
?>
If you want to get only the first 5 children terms that have posts you could filter the array by using a WP_query for each term to check if it has any posts for that term:
<?php
$term_id =182;
$taxonomy_name="geram_category";
$term_children = get_term_children( $term_id, $taxonomy_name );
$term_children = array_filter( $term_children, function( $term_id ) {
$args = array(
'post_type' => 'spanish',
'posts_per_page' => 1,
'tax_query' => array(
array(
'taxonomy' => 'geram_category',
'field' => 'term_id',
'terms' => $term_id,
),
),
);
$query = new WP_Query( $args );
if( $query->found_posts ) {
return true;
} else {
return false;
}
});
$term_children = array_slice( $term_children, 0, 5, true );
foreach ( $term_children as $child ) {
$term = get_term_by( 'id', $child, $taxonomy_name);
echo '<li><a href="' . get_term_link( $child, $taxonomy_name ) . '">' . $term->name . '</a></li>';
}
?>