The first issue that I see is that if you are going to do a loop like this inside of a function
if ( $args->have_posts() ) :
while ( $args->have_posts() ) : $args->the_post();
then you must define must add
global $post;
in your function before you do so.
Do you have debugging turned on so you can see the actual errors that are crashing your page?