En Wordpress el contenido de la consulta actual suele almacenarse en la global $posts. Tú estabas modificando su contenido, por eso al cambiar el nombre te ha vuelto a funcionar. Por cierto deberías añadir la siguiente línea justo después de terminar tu foreach:
Por último te digo que get_posts hace uso directo de WP_Query y fue ideado para usarse en un contexto muy específico. Concretamente para mostrar las entradas listadas en el front-end. Puedes usarlo como te dé la gana pero yo te recomiendo que en su lugar utilices directamente WP_Query. Más potente, cómodo y sencillo.
wp_reset_postdata documentación:
http://codex.wordpress.org/Function_...reset_postdata
WP_Query documentación:
http://codex.wordpress.org/Class_Reference/WP_Query