На крупных сайтах и интернет-магазинах, построенных на WordPress, часто возникает задача улучшить навигацию по спискам записей или товарам. Классическая пагинация с простыми ссылками «Вперёд» и «Назад» не всегда удобна, особенно если контента много и он структурирован по нескольким уровням. В этой статье разберём, как создать многоуровневую пагинацию в WordPress, которая поможет пользователям быстро ориентироваться и находить нужные страницы.
Почему нужна многоуровневая пагинация в WordPress
Стандартная пагинация WordPress (paginate_links(), the_posts_pagination()) выводит простые номера страниц и кнопки следующей/предыдущей страницы. Но если у вас, например, крупный блог с разделением на категории, или интернет-магазин с фильтрами, то пользователю полезно видеть структуру страниц более детально.
Многоуровневая пагинация позволяет:
- Отобразить сразу несколько уровней страниц для быстрой навигации.
- Информировать пользователя о текущем месте в структуре.
- Улучшить UX и SEO за счёт более логичной навигации.
- Снизить количество кликов для перехода к нужному разделу.
Такую пагинацию сложно получить из коробки, поэтому разберём, как её реализовать самостоятельно.
Основные подходы к реализации многоуровневой пагинации
Для начала поймём, что подразумевается под «многоуровневой пагинацией». Обычно это значит, что помимо обычных страниц пагинации есть вложенные уровни, например:
- Пагинация по страницам внутри категории.
- Пагинация с фильтрами и дополнительными параметрами.
- Пагинация с вкладками или разделами.
Для реализации можно использовать:
- Кастомные функции с использованием
paginate_links()и модификацией параметров. - AJAX-пагинацию для подгрузки данных без перезагрузки страницы.
- Плагины с расширенными возможностями пагинации.
Пример многоуровневой пагинации с категориями
Предположим, у нас блог с категориями, и мы хотим вывести пагинацию с возможностью переключения между категориями без перезагрузки страницы.
<?php
function wpin_get_category_pagination($category_id, $paged = 1) {
$args = [
'cat' => $category_id,
'posts_per_page' => 10,
'paged' => $paged
];
$query = new WP_Query($args);
if ($query->have_posts()) {
while ($query->have_posts()) {
$query->the_post();
echo '<h2>' . get_the_title() . '</h2>';
// Вывод контента...
}
$big = 999999999; // уникальное число
$pagination = paginate_links([
'base' => str_replace($big, '%#%', esc_url(get_pagenum_link($big))),
'format' => '?paged=%#%',
'current' => max(1, $paged),
'total' => $query->max_num_pages,
'type' => 'list',
]);
echo '<nav class="wpin-pagination">' . $pagination . '</nav>';
}
wp_reset_postdata();
}
?>
Далее можно использовать AJAX, чтобы при смене категории подгружать пагинацию и записи без перезагрузки.
Реализация AJAX-пагинации с несколькими уровнями
AJAX позволяет делать пагинацию плавной и удобной, особенно если нужно менять несколько параметров (категории, фильтры) одновременно.
Пример ключевых шагов:
- Создаём JavaScript, который ловит клики по ссылкам пагинации и отправляет AJAX-запрос.
- На сервере обрабатываем запрос и возвращаем HTML с нужными записями и пагинацией.
- Обновляем содержимое страницы без перезагрузки.
JavaScript для AJAX-пагинации
document.addEventListener('click', function(e) {
if (e.target.closest('.wpin-pagination a')) {
e.preventDefault();
var url = e.target.href;
fetch(url + '&wpin_ajax=1')
.then(response => response.text())
.then(html => {
document.querySelector('#wpin-post-list').innerHTML = html;
});
}
});
PHP обработчик AJAX-запроса
add_action('template_redirect', function() {
if (isset($_GET['wpin_ajax']) && $_GET['wpin_ajax'] == 1) {
$paged = isset($_GET['paged']) ? intval($_GET['paged']) : 1;
$cat = isset($_GET['cat']) ? intval($_GET['cat']) : 0;
wpin_get_category_pagination($cat, $paged);
exit;
}
});
Использование плагинов для расширенной пагинации
Если хочется готовое решение, можно обратить внимание на плагины с расширенными возможностями пагинации. Например:
- WP-PageNavi — классический плагин для пагинации с настройками.
- My Popup — можно использовать для вывода подсказок и навигационных подсказок в многоуровневой пагинации.
Если нужна AJAX-пагинация с кастомным дизайном, стоит рассмотреть создание собственного решения на базе WP REST API.
Советы по оптимизации многоуровневой пагинации
Чтобы пагинация работала быстро и корректно, учитывайте следующие моменты:
- Используйте
WP_Queryс правильными параметрами для выборки записей. - Кэшируйте результаты запросов, если данные редко меняются.
- Оптимизируйте запросы, избегая лишних JOIN и тяжелых условий.
- Тестируйте пагинацию на различных устройствах и браузерах.
- Обеспечивайте доступность — удобство навигации для всех пользователей.
Итог
Многоуровневая пагинация — отличный способ улучшить навигацию на больших сайтах WordPress. С помощью кастомного кода и AJAX можно сделать удобный и быстрый интерфейс. Для начала стоит реализовать базовую пагинацию с учётом категорий или фильтров, а затем добавить динамическую подгрузку контента. Готовые плагины помогут сэкономить время, но для специфических задач лучше писать собственные решения.