Как создать выборочное отображение постов в WordPress по таксономиям

|

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

Что такое таксономии и зачем фильтровать записи по ним

Таксономии в WordPress – это системы классификации записей. Стандартные таксономии — это категории и метки. Но также можно создавать свои таксономии (регистрировать кастомные) для более точной группировки контента.

Например, если у вас сайт с рецептами, можно создать таксономию кухня (итальянская, японская), а также таксономию время приготовления (быстрые, медленные). Тогда выборка рецептов по таким критериям позволит посетителям быстро находить нужные блюда.

Правильное использование таксономий и запросов по ним существенно улучшает удобство сайта и помогает сделать его контент более релевантным.

Использование WP_Query для выборки записей по таксономиям

Основной способ выборки постов по таксономиям – использовать параметры tax_query в классе WP_Query. Этот параметр позволяет создавать сложные условия фильтрации по одной или нескольким таксономиям.

Пример простого запроса, который выбирает записи из таксономии category с термином novosti:

$args = [
    'post_type' => 'post',
    'tax_query' => [
        [
            'taxonomy' => 'category',
            'field'    => 'slug',
            'terms'    => 'novosti',
        ],
    ],
];
$query = new WP_Query($args);

Здесь ключевой момент – элемент массива tax_query с параметрами:

Сложные запросы с несколькими таксономиями

Можно фильтровать по нескольким таксономиям одновременно с помощью логики AND или OR. Например, вывести записи из категории «novosti» И с меткой «aktsiya»:

$args = [
    'post_type' => 'post',
    'tax_query' => [
        'relation' => 'AND',
        [
            'taxonomy' => 'category',
            'field'    => 'slug',
            'terms'    => 'novosti',
        ],
        [
            'taxonomy' => 'post_tag',
            'field'    => 'slug',
            'terms'    => 'aktsiya',
        ],
    ],
];
$query = new WP_Query($args);

Это позволяет очень гибко формировать выборки и отображать нужный контент.

Пример функции yelly_get_filtered_posts для выборочного вывода

Чтобы упростить повторное использование, создадим функцию yelly_get_filtered_posts, которая принимает массив параметров и возвращает HTML с постами:

function yelly_get_filtered_posts($taxonomy_filters = [], $post_type = 'post', $posts_per_page = 5) {
    $tax_query = [];

    foreach ($taxonomy_filters as $taxonomy => $terms) {
        if (!empty($terms)) {
            $tax_query[] = [
                'taxonomy' => $taxonomy,
                'field' => 'slug',
                'terms' => (array)$terms,
            ];
        }
    }

    $args = [
        'post_type' => $post_type,
        'posts_per_page' => $posts_per_page,
    ];

    if (!empty($tax_query)) {
        if (count($tax_query) > 1) {
            $args['tax_query'] = array_merge(['relation' => 'AND'], $tax_query);
        } else {
            $args['tax_query'] = $tax_query;
        }
    }

    $query = new WP_Query($args);

    if (!$query->have_posts()) {
        return '<p>Записей не найдено.</p>';
    }

    $output = '<ul class="yelly-post-list">';
    while ($query->have_posts()) {
        $query->the_post();
        $output .= '<li><a href="' . get_permalink() . '">' . get_the_title() . '</a></li>';
    }
    $output .= '</ul>';

    wp_reset_postdata();

    return $output;
}

Эту функцию можно вызвать, например, так:

echo yelly_get_filtered_posts([
    'category' => 'novosti',
    'post_tag' => ['aktsiya', 'skidki']
], 'post', 10);

Она выведет список из 10 записей, которые одновременно принадлежат категории novosti и имеют одну из меток aktsiya или skidki.

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

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

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

Это помогает избежать тормозов при сложных фильтрациях и уменьшает нагрузку на сервер.

Советы по производительности при работе с таксономиями в WordPress

При частом использовании сложных запросов с tax_query важно учитывать производительность:

Как кэшировать выборку с tax_query

Пример простого кэширования с Transients API:

function yelly_get_cached_filtered_posts($taxonomy_filters, $post_type = 'post', $posts_per_page = 5) {
    $cache_key = 'yelly_posts_' . md5(serialize([$taxonomy_filters, $post_type, $posts_per_page]));

    $cached = get_transient($cache_key);
    if ($cached !== false) {
        return $cached;
    }

    $result = yelly_get_filtered_posts($taxonomy_filters, $post_type, $posts_per_page);
    set_transient($cache_key, $result, 12 * HOUR_IN_SECONDS);

    return $result;
}

Такой подход снижает нагрузку на базу данных при повторных обращениях.

Выводы и рекомендации

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

Для упрощения работы рекомендуем использовать функцию yelly_get_filtered_posts, а для повышения производительности — кэширование и плагины оптимизации, такие как Clearfy Pro.

Соблюдая простые правила фильтрации и оптимизации, вы сможете создавать быстрые и удобные сайты с продвинутыми возможностями по выбору и отображению контента.

Как создать динамический список с постами WordPress с использованием AJAX
18.03.2026
Как разделить производственную и тестовую среду в WordPress: практические решения и примеры
22.12.2025
Как удалить или заблокировать загруженные файлы в WordPress через .htaccess
19.04.2026
Как автоматизировать управление отзывами в WordPress с помощью Expert Review
10.02.2026
Как использовать метаданные для оптимизации WordPress
13.01.2026
×
День SEO
Время сделать подарок своему WordPress!
-20% на премиум

шаблоны и плагины

Порадуй свой сайт ⋙