Пагинация на Wordpress

26-09-2024 - 0 minutes, 39 seconds -
wordpress

Краткий экскурс в пагинацию

В этот раз мы будем делать пагинацию на Wordpress.

Для начала, нам придётся временно переопределить глобальный запрос:

$global_wp_query = $wp_query;

Затем, зададим страницу по умолчанию:

$paged = get_query_var('paged') ? absint(get_query_var('paged')) : 1;

И сформируем наш запрос, указав параметр posts_per_page вместо pagenumbers:

$wp_query = new WP_Query([
    'posts_per_page' => 15,
    'post_type' => 'post',
    'paged' => $paged,
]);

Выводим в цикле наши записи:

<?php while ($wp_query->have_posts()) : $wp_query->the_post() ?>
    ...
<?php endwhile; wp_reset_postdata() ?>

И пагинацию:

the_posts_pagination([
    'total'     => $wp_query->max_num_pages,
    'mid_size'  => 3,
    'prev_next' => true,
    'prev_text' => '&larr;',
    'next_text' => '&rarr;',
]);

И не забываем пере-переопределить (ну, то есть, вернуть) глобальный запрос:

$wp_query = $global_wp_query;

Изменить внешний вид выводимой пагинации можно хуком:

add_filter('navigation_markup_template', function ($template, $class) {
    return
    '<nav class="navigation %1$s" role="navigation">'.
    '    <div class="nav-links">%3$s</div>'.
    '</nav>';
}, 10, 2);