# WP_Tax_Query: Как работает запрос таксономии в WordPress
Класс **WP_Tax_Query** используется для выполнения запросов к таксономиям в WordPress. Он помогает создавать SQL-коды, которые отфильтровывают результаты основного запроса в зависимости от терминов таксономии.
## Что такое WP_Tax_Query?
WP_Tax_Query — это вспомогательный класс, который позволяет основным классам запросов, таким как **WP_Query**, фильтровать свои результаты по метаданным объектов. Он генерирует подзапросы JOIN и WHERE, которые присоединяются к строке основного SQL-запроса.
## Использование
Для создания нового запроса к таксономии нужно создать экземпляр класса WP_Tax_Query:
```php
$tax_query = new WP_Tax_Query();
// используйте методы класса
Методы класса
Вот основные методы, доступные в классе WP_Tax_Query:
- public __construct( $tax_query ): Конструктор класса, принимает массив аргументов запросов.
- private clean_query( &$query ): Убирает лишние данные из запроса.
- protected find_compatible_table_alias( $clause, $parent_query ): Находит совместимый алиас таблицы для запроса.
- public get_sql( $primary_table, $primary_id_column ): Генерирует SQL-коды для основного запроса.
- protected get_sql_clauses(): Создает JOIN и WHERE SQL-коды для основного запроса.
- public get_sql_for_clause( &$clause, $parent_query ): Генерирует SQL-коды для конкретного условия запроса.
- protected get_sql_for_query( &$query, $depth = 0 ): Генерирует SQL-коды для массива запросов.
- protected static is_first_order_clause( $query ): Определяет, является лиClause - начальными.
- public sanitize_query( $queries ): Очищает и упрощает ��апрос.
- public sanitize_relation( $relation ): Проверяет и очищает оператор связи.
- public transform_query( &$query, $resulting_field ): Преобразует запрос из одного поля в другое.
Изменения
Класс был введен в версии 3.1.0.
Пример кода
Ниже приведен пример использования некоторых методов класса WP_Tax_Query для создания запроса к таксономии:
$tax_query_args = [
'relation' => 'AND',
[
'taxonomy' => 'category',
'terms' => [1, 2],
'field' => 'term_id',
'operator' => 'IN',
],
[
'taxonomy' => 'post_tag',
'terms' => ['news', 'events'],
'field' => 'slug',
'operator' => 'NOT IN',
],
];
$tax_query = new WP_Tax_Query($tax_query_args);
$sql = $tax_query->get_sql('wp_posts', 'ID');
echo $sql['join'];
echo $sql['where'];
В этом примере создается запрос, который будет фильтровать посты по определённым категориям и тегам.
- relation определяет, как должны обрабатываться условия (AND или OR).
- taxonomy указывает, какая таксономия будет использоваться.
- terms перечисляет термины для фильтрации.
- field говорит, по какому полю производить фильтрацию (например,
term_idилиslug). - operator указывает оператор SQL для фильтрации (например,
INилиNOT IN).
Заключение
WP_Tax_Query — мощный инструмент для выполнения эффективных запросов к таксономиям в WordPress. Понимание его методов и структуры позволит вам гибко управлять запросами и выводить на экран именно те данные, которые вам нужны.