Как создать многоуровневую пагинацию в WordPress с примерами кода

На крупных сайтах и интернет-магазинах, построенных на 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 позволяет делать пагинацию плавной и удобной, особенно если нужно менять несколько параметров (категории, фильтры) одновременно.

Пример ключевых шагов:

  1. Создаём JavaScript, который ловит клики по ссылкам пагинации и отправляет AJAX-запрос.
  2. На сервере обрабатываем запрос и возвращаем HTML с нужными записями и пагинацией.
  3. Обновляем содержимое страницы без перезагрузки.

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 можно сделать удобный и быстрый интерфейс. Для начала стоит реализовать базовую пагинацию с учётом категорий или фильтров, а затем добавить динамическую подгрузку контента. Готовые плагины помогут сэкономить время, но для специфических задач лучше писать собственные решения.

Как отключить Emoji в WordPress для ускорения сайта
16.04.2026
Как удалить или отключить Gutenberg в WordPress
05.12.2025
Как удалить неиспользуемые шорткоды в WordPress
11.03.2026
Как удалить старые посты из очереди кронов в WordPress
08.02.2026
Автоматическое удаление товаров из корзины WooCommerce при отсутствии на складе
28.05.2026