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

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

Почему стандартная пагинация не работает с несколькими таксономиями

Стандартный класс WP_Query отлично справляется с простыми запросами, однако при фильтрации по нескольким таксономиям возникают нюансы, которые влияют на пагинацию. Обычно они связаны с тем, что параметры запроса формируются неправильно, либо не учитывается параметр пагинации paged. Кроме того, если использовать параметр tax_query без точной настройки логических операторов, можно получить несоответствие количества страниц и записей.

Например, если фильтруете записи одновременно по категориям и меткам, то для корректной работы нужен правильный синтаксис tax_query с указанием оператора relation между условиями. Без этого пагинация сработает некорректно — либо будут повторяться страницы, либо записи не будут делиться на страницы должным образом.

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

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

Рассмотрим пример запроса, который фильтрует записи по двум таксономиям — категории и кастомной таксономии product_type. Для корректной пагинации нам нужно задать параметры tax_query с правильным отношением, а также передать текущий номер страницы из глобальной переменной $paged.

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

    $args = array(
        'post_type' => 'post',
        'posts_per_page' => 10,
        'paged' => $paged,
        'tax_query' => array(
            'relation' => 'AND',
            array(
                'taxonomy' => 'category',
                'field' => 'slug',
                'terms' => array('novosti', 'stati'),
                'operator' => 'IN'
            ),
            array(
                'taxonomy' => 'product_type',
                'field' => 'slug',
                'terms' => array('software', 'hardware'),
                'operator' => 'IN'
            ),
        ),
    );

    $query = new WP_Query($args);
    return $query;
}

Обратите внимание на параметр relation в tax_query. Он задаёт логику объединения фильтров — AND означает, что записи должны соответствовать всем условиям, OR — хотя бы одному из них.

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

После получения объекта WP_Query нужно вывести записи и отобразить навигацию. Для этого можно использовать стандартные функции WordPress или плагин WP-PageNavi, который значительно облегчает создание удобной пагинации.

Пример вывода записей и пагинации с использованием WP-PageNavi:

function wppagenavi_display_filtered_posts() {
    $query = wppagenavi_get_filtered_posts();

    if ($query->have_posts()) {
        echo '<div class="posts-list">';
        while ($query->have_posts()) {
            $query->the_post();
            echo '<h2>' . get_the_title() . '</h2>';
            echo '<div>' . get_the_excerpt() . '</div>';
        }
        echo '</div>';

        if (function_exists('wp_pagenavi')) {
            wp_pagenavi(array('query' => $query));
        } else {
            // Стандартная навигация
            previous_posts_link('< Назад');
            next_posts_link('Вперед >', $query->max_num_pages);
        }
    } else {
        echo '<p>Посты не найдены.</p>';
    }
    wp_reset_postdata();
}

Для установки WP-PageNavi используйте репозиторий WordPress или скачайте с wpshop.ru.

Обработка параметров фильтрации из URL для динамической пагинации

Часто хочется сделать фильтрацию динамической, когда пользователь может выбирать таксономии через GET-параметры, а пагинация при этом корректно учитывает выбранные фильтры. Для этого необходимо получать параметры из URL и подставлять их в tax_query.

Пример получения параметров и формирования запроса:

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

    $categories = isset($_GET['category']) ? explode(',', sanitize_text_field($_GET['category'])) : array();
    $product_types = isset($_GET['product_type']) ? explode(',', sanitize_text_field($_GET['product_type'])) : array();

    $tax_query = array('relation' => 'AND');

    if (!empty($categories)) {
        $tax_query[] = array(
            'taxonomy' => 'category',
            'field' => 'slug',
            'terms' => $categories,
            'operator' => 'IN'
        );
    }

    if (!empty($product_types)) {
        $tax_query[] = array(
            'taxonomy' => 'product_type',
            'field' => 'slug',
            'terms' => $product_types,
            'operator' => 'IN'
        );
    }

    // Если нет фильтров, удаляем relation
    if (count($tax_query) === 1) {
        $tax_query = array();
    }

    $args = array(
        'post_type' => 'post',
        'posts_per_page' => 10,
        'paged' => $paged,
    );

    if (!empty($tax_query)) {
        $args['tax_query'] = $tax_query;
    }

    $query = new WP_Query($args);
    return $query;
}

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

Рекомендации для отладки и оптимизации пагинации с таксономиями

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

  • Всегда проверяйте параметр paged — без него пагинация не сработает.
  • Используйте правильный синтаксис tax_query с указанием relation, чтобы фильтр работал как ожидается.
  • Не забывайте вызывать wp_reset_postdata() после пользовательского запроса, чтобы не повредить глобальный $post.
  • Для сложных сценариев с динамическими фильтрами используйте проверку параметров из URL, фильтруйте их и формируйте tax_query динамически.
  • При большом объёме данных рассмотрите использование плагинов кеширования или оптимизацию запросов, чтобы пагинация не тормозила сайт.

Использование плагина Clearfy Pro для оптимизации запросов

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

Заключение по теме пагинации с несколькими таксономиями

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

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

⭐⭐⭐⭐⭐
Как сделать пагинацию для контента в Page Builder WordPress
16.01.2026
Как сделать отображение пагинации в WordPress для таблиц
05.12.2025
Как добавить пагинацию в кастомный блок Gutenberg в WordPress
22.03.2026
Как исправить неработающую пагинацию при пользовательских запросах WP_Query в WordPress
28.04.2026
Как сделать пагинацию для комплексных запросов с несколькими таксономиями в WordPress
03.04.2026
×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше