Pagination With Custom WP Query not functioning

One issue at least: you’ll want to close the loop before outputting your pagination links, or else they’ll be output on every iteration of the loop. But you’ve got paginate_links() before endwhile;.

Try this arrangement instead:

// open loop
if ( have_posts() ) : while ( have_posts() ) : the_post();

    // Loop markup

// close loop
endwhile; endif;

// pagination here
paginate_links( $args );

For a custom query loop, you’ll want to handle the query accordingly:

// custom loop query
$custom = new WP_Query( $args );

// Pagination fix
$original_query = $wp_query;
$wp_query = NULL;
$wp_query = $custom;

// open loop
if ( $custom->have_posts() ) : while ( $custom->have_posts() ) : $custom->the_post();

    // Loop markup

// close loop
endwhile; endif;

// pagination here
paginate_links( $args );

// reset query
wp_reset_query();