foreach( $posts_array as $post ) { echo the_title(); } I think the problem is you call the_title() without [setup_postdata][1] first If I were you, I'll simply use **$post->post_title**. foreach( $posts_array as $post ) { echo $post->post_title; } This is because you are "get_posts"ing within a loop, and setup_postdata will change global variable $post; [1]: http://codex.wordpress.org/Function_Reference/setup_postdata