the_title() と get_the_title()

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 ループの中で使ってください。