Term Description Echo or Return – display problems

You need to store every tags in a variable, and then return the whole thing. Define an empty value before the foreach and append the data to it. Don’t use the return inside the loop, since it will quit the loop once it reaches the first return. Take a look at this piece of your code that I have modified:

// Define an empty variable
$data="";
foreach ( $terms as $term ) {
    // The $term is an object, so we don't need to specify the $taxonomy.
    $term_link = get_term_link( $term );
    $term_ID = $term->term_id;

    // If there was an error, continue to the next term.
    if ( is_wp_error( $term_link ) ) {
            continue;
    }

    // Append each term's description to it
    $data .= term_description($term_ID);

}
// Return the entire data
return $data;