Как сделать вывод постов по таксономии с мета полями в WordPress

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

Что такое таксономии и мета поля в WordPress

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

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

Для примера предположим, что у нас есть таксономия product_category и посты с мета полем price.

Как сформировать запрос WP_Query для вывода постов по таксономии

Для фильтрации по таксономии используется параметр tax_query.

$args = [
    'post_type' => 'product',
    'tax_query' => [
        [
            'taxonomy' => 'product_category',
            'field' => 'slug',
            'terms' => 'electronics',
        ],
    ],
];

$query = new WP_Query($args);

Этот код выведет все посты типа product, которые принадлежат таксономии product_category с ярлыком (slug) electronics.

Добавление фильтрации по мета полям

Чтобы дополнительно отфильтровать посты по мета полю, например, вывести товары с ценой больше 10000, используем параметр meta_query:

$args = [
    'post_type' => 'product',
    'tax_query' => [
        [
            'taxonomy' => 'product_category',
            'field' => 'slug',
            'terms' => 'electronics',
        ],
    ],
    'meta_query' => [
        [
            'key' => 'price',
            'value' => 10000,
            'compare' => '>',
            'type' => 'NUMERIC',
        ],
    ],
];

$query = new WP_Query($args);

Такой запрос выведет товары из категории "electronics" с ценой больше 10000.

Сортировка постов по мета полю

Часто нужно не только фильтровать, но и сортировать записи по мета значению. Например, отсортировать товары по возрастанию цены.

$args = [
    'post_type' => 'product',
    'tax_query' => [
        [
            'taxonomy' => 'product_category',
            'field' => 'slug',
            'terms' => 'electronics',
        ],
    ],
    'meta_key' => 'price',
    'orderby' => 'meta_value_num',
    'order' => 'ASC',
];

$query = new WP_Query($args);

Обратите внимание, что для числовой сортировки нужно использовать orderby => 'meta_value_num', а не просто meta_value.

Комбинированный запрос с фильтрацией и сортировкой

Можно совместить фильтрацию по таксономии и мета полю, а также сортировку. Например, вывести товары категории "electronics" с ценой больше 10000, отсортировав по цене:

$args = [
    'post_type' => 'product',
    'tax_query' => [
        [
            'taxonomy' => 'product_category',
            'field' => 'slug',
            'terms' => 'electronics',
        ],
    ],
    'meta_query' => [
        [
            'key' => 'price',
            'value' => 10000,
            'compare' => '>',
            'type' => 'NUMERIC',
        ],
    ],
    'meta_key' => 'price',
    'orderby' => 'meta_value_num',
    'order' => 'ASC',
];

$query = new WP_Query($args);

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

После создания запроса выводим записи в цикле:

if ( $query->have_posts() ) {
    echo '<ul>';
    while ( $query->have_posts() ) {
        $query->the_post();
        $price = get_post_meta(get_the_ID(), 'price', true);
        echo '<li>' . get_the_title() . ' — Цена: ' . esc_html($price) . '</li>';
    }
    echo '</ul>';
} else {
    echo 'Товары не найдены';
}
wp_reset_postdata();

Такой шаблон выведет список постов с их названием и ценой.

Оптимизация запросов по мета полям и таксономиям

Запросы с meta_query могут быть медленными на больших сайтах, так как таблица wp_postmeta не оптимизирована под сложные запросы. Рекомендуется:

  • Использовать индексы на мета ключах и значениях (на уровне базы данных).
  • Минимизировать количество meta_query и tax_query в одном запросе.
  • Использовать кеширование результатов запросов (например, через Transients API или внешние кеши).

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

Практические советы и распространенные ошибки

Проверяйте типы данных в meta_query

Если сравниваете числовые значения, всегда указывайте 'type' => 'NUMERIC', иначе сортировка и сравнение будут работать некорректно.

Используйте правильный параметр field в tax_query

При указании таксономии можно фильтровать по ID, slug или name. Обычно slug удобнее, но важно, чтобы значение совпадало с реальным ярлыком термина.

Не забывайте сбрасывать postdata

После кастомных запросов вызывайте wp_reset_postdata(), чтобы избежать конфликтов с глобальным циклом WordPress.

Заключение

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

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

Удаление неиспользуемых метаданных в WordPress для оптимизации базы данных
15.11.2025
Оптимальные хуки для улучшения производительности WordPress
29.11.2025
WooCommerce: решение проблемы с исчезновением SKU после изменения атрибутов товара
23.05.2026
WooCommerce: автоматическое отключение неактивных методов оплаты
12.06.2026
Как отключить регистрацию по email в WordPress
15.03.2026