Custom pagination in WordPress

<?php

$posts_page = filter_input( INPUT_GET, 'posts_page', FILTER_SANITIZE_NUMBER_INT );

if ( empty( $posts_page ) ) {
	$posts_page = 1;
}

$query = new WP_Query(
	array(
		'post_type'      => 'post',
		'posts_per_page' => 6,
		'paged'          => $posts_page,
	)
);

$max_num_pages = (int) $query->max_num_pages;

if ( $query->have_posts() ) : ?>

	<div class="pt-posts">
		<?php while ( $query->have_posts() ) : $query->the_post(); ?>

			<div class="pt-post">
				<?php the_title(); ?>
			</div>

		<?php endwhile; ?>
	</div>

	<?php if ( $max_num_pages > $posts_page ) :

		$url = add_query_arg( 'posts_page', $posts_page + 1 );

		?>
		<div>
			<a href="<?php echo esc_url( $url ); ?>">
				<?php esc_html_e( 'Load more…', 'theme' ); ?>
			</a>
		</div>

	<?php endif; ?>

	<?php

	wp_reset_postdata();

endif;