Firstly you have your while loop to run through all your posts.
And above your while loop you have your args.
You need to add this arg
$args['paged'] = $paged;
Below is a template to start your while loop
$args['post_type'] = 'post'; $query = new WP_Query($args); while ( $query->have_posts() ) : the_post(); ?> <?php $query->the_post(); $post_id = get_the_ID(); ?> <div class="card"> <a href="<?php the_permalink(); ?>" class="card-header text-center"> <?php the_title(); ?> </a> <div class="card-body"> <?php the_content(); ?> </div> </div> <?php endwhile; ?>
Your Args must be before your Query!
Then after your endwhile. Paste this code to display your pagination links
<div class="pagination"> <?php echo paginate_links( array( 'base' => str_replace( 999999999, '%#%', esc_url( get_pagenum_link( 999999999 ) ) ), 'total' => $query->max_num_pages, 'current' => max( 1, get_query_var( 'paged' ) ), 'format' => '?paged=%#%', 'show_all' => false, 'type' => 'plain', 'end_size' => 2, 'mid_size' => 1, 'prev_next' => true, 'prev_text' => sprintf( '<i></i> %1$s', __( 'Previous', 'text-domain' ) ), 'next_text' => sprintf( '%1$s <i></i>', __( 'Next', 'text-domain' ) ), 'add_args' => false, 'add_fragment' => '', ) ); ?> </div>