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

Пагинация — одна из важнейших составляющих удобной навигации на сайте. В WordPress стандартный способ разбивки на страницы обычно простой: предыдущая, следующая, и номера страниц. Но что делать, если нужно реализовать многоуровневую пагинацию, например, для сложных архивов или большого каталога записей с разбиением по категориям и подкатегориям? В этой статье мы подробно разберём, как в WordPress создать многоуровневую пагинацию с кастомным выводом и примерами кода.

Почему стандартная пагинация WordPress не всегда подходит

По умолчанию WordPress использует функции paginate_links() и the_posts_pagination() для вывода страниц. Это хорошо для простых случаев, но если вы хотите создать более сложную навигацию, например, показывать пагинацию внутри разных таксономий, с дополнительными уровнями вложенности или с кастомным количеством страниц в блоке, то стандартных функций может не хватить.

Пример: если у вас есть каталог товаров или записей, разбитых по категориям и подкатегориям, и вы хотите выводить навигацию сначала по категориям, а внутри них — постраничную навигацию для записей, потребуется кастомное решение.

В таких случаях помогает создание собственной функции пагинации, которая учитывает контекст и умеет работать с несколькими уровнями.

Основы создания многоуровневой пагинации в WordPress

В основе лежит работа с объектом WP_Query или глобальным $wp_query, а также с параметрами пагинации — paged и max_num_pages. Чтобы реализовать многоуровневую пагинацию, нужно:

  • Определить текущий уровень пагинации (например, категория, подкатегория, страница в категории).
  • Собрать URL с правильными параметрами для каждого уровня.
  • Вывести навигацию с помощью кастомного HTML, учитывая все уровни.

Далее приведём пример функции wpset_get_multilevel_pagination(), которая строит многоуровневую пагинацию.

Пример функции многоуровневой пагинации

function wpset_get_multilevel_pagination($query, $base_url) {
    $total_pages = $query->max_num_pages;
    $current_page = max(1, get_query_var('paged'));

    if ($total_pages <= 1) return '';

    $pagination = '<nav class="wpset-pagination"><ul>';

    // Добавим кнопку «Предыдущая»
    if ($current_page > 1) {
        $prev_page = $current_page - 1;
        $pagination .= '<li><a href="' . esc_url(add_query_arg('paged', $prev_page, $base_url)) . '">‹ Предыдущая</a></li>';
    }

    // Добавим номера страниц с учётом многоуровневости
    for ($i = 1; $i <= $total_pages; $i++) {
        $class = ($i == $current_page) ? ' class="active"' : '';
        $pagination .= '<li' . $class . '><a href="' . esc_url(add_query_arg('paged', $i, $base_url)) . '">' . $i . '</a></li>';
    }

    // Добавим кнопку «Следующая»
    if ($current_page < $total_pages) {
        $next_page = $current_page + 1;
        $pagination .= '<li><a href="' . esc_url(add_query_arg('paged', $next_page, $base_url)) . '">Следующая ›</a></li>';
    }

    $pagination .= '</ul></nav>';

    return $pagination;
}

Эта функция принимает объект WP_Query и базовый URL (например, адрес категории) и создаёт навигацию с кнопками «Предыдущая», «Следующая» и номерами страниц. Для многоуровневой пагинации нужно правильно формировать $base_url с учётом уровней категорий или других параметров.

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

Чтобы пагинация работала корректно при навигации по категориям и подкатегориям, нужно:

  1. Получать текущий термин таксономии и его родителей.
  2. Формировать базовый URL с учетом иерархии.
  3. Передавать этот URL в функцию пагинации.

Пример получения базового URL для категории и подкатегорий:

function wpset_get_category_base_url($term_id, $taxonomy = 'category') {
    $term = get_term($term_id, $taxonomy);
    if (!$term || is_wp_error($term)) return home_url('/');

    $parents = get_ancestors($term_id, $taxonomy);
    $parents = array_reverse($parents);

    $url_parts = [];
    foreach ($parents as $parent_id) {
        $parent = get_term($parent_id, $taxonomy);
        if ($parent && !is_wp_error($parent)) {
            $url_parts[] = $parent->slug;
        }
    }

    $url_parts[] = $term->slug;

    return home_url('/' . implode('/', $url_parts) . '/');
}

Используя эту функцию, можно получить правильный URL с учётом вложенности категории, который затем передать в wpset_get_multilevel_pagination().

Реализация многоуровневой пагинации для кастомных типов записей и таксономий

Для кастомных типов записей и таксономий задача усложняется из-за нестандартных правил URL. В таких случаях рекомендуется:

  • Использовать WP_Rewrite для правильной генерации URL.
  • Передавать параметры запроса через add_query_arg() или настраивать rewrite для таксономий.
  • Для пагинации применять параметр paged в WP_Query.

Пример создания запроса с пагинацией для пользовательского типа записей:

$paged = max(1, get_query_var('paged'));
$args = [
    'post_type' => 'product',
    'posts_per_page' => 10,
    'paged' => $paged,
];
$query = new WP_Query($args);

После этого можно вызвать функцию пагинации, передав $query и базовый URL текущей таксономии.

Пример использования с плагином ABC Pagination

Если хотите упростить создание пагинации, можно использовать плагин ABC Pagination. Он поддерживает кастомные шаблоны и может быть настроен для многоуровневой пагинации с использованием фильтров и хуков.

Оптимизация и UX многоуровневой пагинации

При реализации многоуровневой пагинации важно учитывать удобство пользователя и производительность:

  • Показывайте ограниченное количество номеров страниц, например, 5–7, с кнопками перехода к первому и последнему.
  • Используйте AJAX-подгрузку страниц для плавной навигации без перезагрузки.
  • Добавьте индикаторы текущего уровня пагинации и пути пользователя (хлебные крошки).
  • Кэшируйте результаты запросов для уменьшения нагрузки на сервер.

Для AJAX-подгрузки можно использовать следующий пример на jQuery:

jQuery(document).on('click', '.wpset-pagination a', function(e) {
    e.preventDefault();
    var url = jQuery(this).attr('href');
    jQuery('#content-area').fadeOut(200, function() {
        jQuery(this).load(url + ' #content-area > *', function() {
            jQuery(this).fadeIn(200);
        });
    });
});

Этот простой скрипт подгружает содержимое без полной перезагрузки страницы, улучшая UX.

Итог: многоуровневая пагинация — ключ к удобной навигации

Создание многоуровневой пагинации требует понимания структуры сайта и правильной работы с WP_Query и URL. Предложенные функции и примеры помогут вам сделать качественную и удобную навигацию даже для сложных сайтов с большим количеством категорий и записей.

Если хотите расширить функционал, советуем ознакомиться с плагином ABC Pagination, который позволит гибко настраивать пагинацию и интегрировать её с вашими темами и типами записей.

Как удалить все неактивные пользователи в WordPress с помощью кода
10.01.2026
Автоматическое удаление нерабочих вариаций товаров в WooCommerce
24.04.2026
WooCommerce: автоматическое отключение неактивных вариаций товаров
25.05.2026
Как удалить неиспользуемые медиа файлы и оптимизировать медиабиблиотеку в WordPress
04.03.2026
Автоматическое изменение веса продукта в WooCommerce при обновлении атрибутов
21.05.2026