Как добавить пагинацию в WordPress для комплексных запросов с помощью WP_Query

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

Что такое комплексные запросы в WordPress и зачем нужна пагинация

Комплексные запросы — это запросы к базе данных WordPress, которые используют несколько параметров для отбора записей. Например, одновременно фильтруют записи по категории, тегам и метаданным. Такие запросы часто нужны для создания кастомных архивов, каталогов или фильтров продуктов.

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

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

Настройка WP_Query для пагинации: основные моменты

Для начала создадим базовый комплексный запрос с пагинацией. Главное — правильно получить номер текущей страницы и передать его в параметр paged:

function wppagenavi_get_complex_query() {
    $paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;

    $args = [
        'post_type' => 'post',
        'posts_per_page' => 5,
        'paged' => $paged,
        'tax_query' => [
            [
                'taxonomy' => 'category',
                'field'    => 'slug',
                'terms'    => 'news',
            ],
        ],
        'meta_query' => [
            [
                'key'     => 'featured',
                'value'   => '1',
                'compare' => '=',
            ],
        ],
    ];

    return new WP_Query($args);
}

Здесь мы фильтруем записи по категории «news» и мета-полю «featured» со значением «1», при этом показываем по 5 записей на страницу.

Вывод пагинации и навигация по страницам

Чтобы вывести ссылки пагинации, используйте функцию paginate_links(), которая гибко настраивается под любые параметры:

function wppagenavi_display_pagination($query) {
    $big = 999999999; // уникальное число для замены

    $pagination = paginate_links([
        'base'      => str_replace($big, '%#%', esc_url(get_pagenum_link($big))),
        'format'    => '?paged=%#%',
        'current'   => max(1, get_query_var('paged')),
        'total'     => $query->max_num_pages,
        'prev_text' => '« Назад',
        'next_text' => 'Вперёд »',
        'type'      => 'list',
    ]);

    if ($pagination) {
        echo '<nav class="wppagenavi-pagination">' . $pagination . '</nav>';
    }
}

Вызовите эту функцию после вывода постов, передавая в неё объект WP_Query.

Полный пример шаблона с комплексным запросом и пагинацией

Вот пример полного кода для использования в шаблоне страницы или кастомного шаблона:

<?php
$query = wppagenavi_get_complex_query();
if ($query->have_posts()) :
    while ($query->have_posts()) : $query->the_post(); ?>
        <article id="post-<?php the_ID(); ?>">
            <h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
            <div class="entry-content"><?php the_excerpt(); ?></div>
        </article>
    <?php endwhile;

    wppagenavi_display_pagination($query);

    wp_reset_postdata();
else :
    echo '<p>Записей не найдено.</p>';
endif;
?>

Советы по оптимизации и устранению ошибок пагинации

1. Убедитесь, что параметр paged правильно получен из запроса. Иногда в зависимости от типа страницы нужно использовать get_query_var('page') вместо paged.

2. Не используйте одновременно paged и page без понимания контекста. Для кастомных страниц пагинация может конфликтовать.

3. Всегда вызывайте wp_reset_postdata() после цикла с вашим запросом. Это предотвратит сбои в глобальном объекте $post.

4. Для AJAX пагинации используйте nonce и корректно обновляйте параметр paged. Это поможет избежать кеширования и ошибок перехода.

5. При использовании сложных фильтров убедитесь, что параметры URL не конфликтуют с пагинацией. Для этого можно использовать функцию add_query_arg() для корректной генерации ссылок.

Дополнительные плагины для улучшения пагинации

Если хотите расширить функциональность пагинации в WordPress, обратите внимание на следующие плагины:

  • WP-PageNavi — классический плагин для кастомной пагинации с множеством настроек.
  • Clearfy Pro — плагин для оптимизации WordPress, включая улучшение пагинации и SEO.

Интеграция этих плагинов с вашим комплексным запросом позволит сделать пагинацию более удобной и функциональной.

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
Как исправить неработающую пагинацию при комплексных запросах WP_Query
17.05.2026
Как исправить ошибку 404 при переходе по страницам пагинации WooCommerce
20.05.2026
Как сделать пагинацию для WordPress на основе пользовательского запроса WP_Query
14.04.2026
Как сделать пагинацию для постов в логических категориях WordPress
07.04.2026
Как сделать пагинацию для комплексных запросов с несколькими таксономиями в WordPress
03.04.2026
×
WordPress
дай сайту суперсилу!

Скидки на топовые темы и плагины

Активировать суперсилу ⋙