Loop shows post 5 times in a query

the_title() is a template tag which relies on global state. Specifically $post global variable, holding current post instance. While you query a set of posts, you never set up that global state for template tag to use. Though in case you started with get_posts() it might be more convenient to leave global state alone altogether … Read more