the_title() は echo を含んでいますので、$string .= the_title(); のようにしても、うまく変数には格納されず、そのページ(コンテナなど)の冒頭に、意図せずに、記事のタイトルが表示されてしまいます。
この場合は、$string .= get_the_title(); のように get_the_title() を使ってください。こちらは、記事のタイトルの文字列を返します。
同様に、the_permalink() も echo を含んでいるため、
<!-- 例はHTMLの場合 -->
<a href="<?php the_permalink(); ?>">hoge hoge</a>
としてもうまく表示されません。こちらも get_permalink() を使うようにしてください。こちらですと、
/* 例はPHPの場合 */
$link_url=get_permalink();
echo "<a href='{$link_url}'>".get_the_title()."</a>";
のように使うことができます。
上記の二つは、get_post() の後の foreach ループの中で使ってください。