the_posts_pagination() работает только с главным циклом WordPress. На странице у вас, скорее всего, свой цикл ( WP_Query() или get_posts() ). Это и является источником проблемы. Обойти эту проблему можно только таким хаком (выдержка из рабочего кода):
global $post, $wp_query;
$query_args = array(
'post_status' => 'publish',
// и прочее...
);
$query = new WP_Query( $query_args );
if ( $query->have_posts() ) {
while ( $query->have_posts() ) {
$query->the_post();
// вывод поста
}
wp_reset_postdata();
$temp_query = $wp_query;
$wp_query = null;
$wp_query = $query;
the_posts_pagination();
// Reset main query object.
$wp_query = null;
$wp_query = $temp_query;
}
Здесь перед вызовом the_posts_pagination() мы подменяем глобальную переменную главного цикла WordPress на наш цикл, а потом возвращаем назад.
Источник