WP_Term_Query

Класс для выполнения запросов к терминам
Класс WordPress
INT 4.6.0
WordPress Icon

Описание класса

Класс WP_Term_Query используется для выполнения запросов категорий в WordPress. Он предоставляет методы для поиска, фильтрации и сортировки категорий, а также для получения результатов запроса.

Этот класс является частью ядра WordPress и находится в файле wp-includes/class-wp-term-query.php.

Методы

  • __construct — Конструктор класса WP_Term_Query. Он инициализирует объект запроса и устанавливает значения параметров.
  • format_terms — Метод используется для форматирования результата запроса в зависимости от запрошенного поля.
  • generate_cache_key — Метод генерирует ключ для кэширования запроса.
  • get_search_sql — Метод используется внутренне для генерации SQL-строки, связанной с параметром «search».
  • get_terms — Метод получает результаты запроса.
  • parse_order — Метод разбирает переменную «order» запроса и приводит ее к ASC или DESC при необходимости.
  • parse_orderby — Метод разбирает и очищает ключи «orderby», переданные в запросе категорий.
  • parse_orderby_meta — Метод генерирует часть SQL-запроса ORDER BY для параметра «orderby», который может быть связан с мета-запросом.
  • parse_query — Метод разбирает аргументы, переданные в запросе категорий, с использованием параметров запроса по умолчанию.
  • populate_terms — Метод создает массив объектов категорий из массива идентификаторов категорий.
  • query — Метод настраивает запрос и получает результаты.

Методы

format_terms()

Метод format_terms() используется для форматирования ответа в зависимости от запрашиваемого поля.

WP_Term_Query::format_terms( WP_Term[] $term_objects, string $_fields ) : WP_Term[]|int[]|string[]

Метод format_terms() принимает два параметра: массив объектов терминов $term_objects и строку $_fields, указывающую поле для форматирования.

$term_objects (обязательный): Массив объектов терминов.

$_fields (обязательный): Поле для форматирования.

Метод format_terms() возвращает массив терминов, строк или целых чисел в зависимости от запрашиваемого поля.

<?php
// Массив объектов терминов
$term_objects = array( $term1, $term2, $term3 );
// Поле для форматирования
$_fields = 'name';
// Форматирование терминов
$formatted_terms = WP_Term_Query::format_terms( $term_objects, $_fields );
// Вывод отформатированных терминов
foreach ( $formatted_terms as $term ) {
    echo $term;
}
?>

В приведенном выше примере мы создаем массив объектов терминов $term_objects и указываем поле 'name' для форматирования. Затем мы вызываем метод format_terms() и передаем ему массив терминов и поле для форматирования. Результатом будет массив отформатированных терминов, которые мы выводим с помощью цикла foreach.

generate_cache_key()

Метод generate_cache_key() класса WP_Term_Query используется для генерации ключа кэша. Ключ кэша представляет собой уникальную строку, которая используется для идентификации кэшированных результатов запроса терминов.

WP_Term_Query::generate_cache_key( array $args, string $sql ): string

Метод generate_cache_key() принимает два параметра: массив $args с обязательными аргументами для запроса терминов и строку $sql с обязательным SQL-запросом.

$args (array) — Обязательные аргументы для запроса терминов.

$sql (string) — Обязательный SQL-запрос.

Метод generate_cache_key() возвращает строку — ключ кэша.

<code>$args</code> = array(
    'taxonomy' => 'category',
    'orderby' => 'name',
    'order' => 'ASC',
);
<code>$sql</code> = "SELECT * FROM wp_terms WHERE taxonomy = 'category' ORDER BY name ASC";
<code>$cache_key</code> = WP_Term_Query::generate_cache_key( <code>$args</code>, <code>$sql</code> );
// Результат: "wp_term_query:taxonomy=category&orderby=name&order=ASC&sql=SELECT * FROM wp_terms WHERE taxonomy = 'category' ORDER BY name ASC"

В данном примере мы создаем массив $args с аргументами для запроса терминов и строку $sql с SQL-запросом. Затем мы вызываем метод generate_cache_key() и передаем ему эти параметры. Метод возвращает строку, которая представляет собой ключ кэша, основанный на переданных аргументах и SQL-запросе.

get_search_sql()

Метод get_search_sql() используется внутренне для генерации SQL-строки, связанной с параметром «search». Он преобразует поисковую строку в SQL-запрос, который может быть использован для поиска терминов.

WP_Term_Query::get_search_sql( string $search ): string

Метод get_search_sql() принимает один обязательный параметр:

  • $search (string) — Поисковая строка.

Метод возвращает строку SQL для поиска.

  • $search (string) — Обязательный. Поисковая строка.

Параметр $search представляет собой строку, которую нужно найти. Это может быть любая поисковая фраза или ключевое слово.

Метод get_search_sql() возвращает строку SQL для поиска. Эта строка может быть использована для выполнения запроса к базе данных и поиска терминов, соответствующих заданной поисковой строке.

<?php
$search = 'example'; // Поисковая строка
// Получение SQL-строки для поиска
$search_sql = WP_Term_Query::get_search_sql( $search );
// Вывод SQL-строки
echo $search_sql;
?>

В этом примере мы создаем переменную $search и присваиваем ей значение «example». Затем мы вызываем метод get_search_sql() класса WP_Term_Query с параметром $search и сохраняем результат в переменной $search_sql. Наконец, мы выводим значение переменной $search_sql, которая будет содержать SQL-строку для поиска терминов, соответствующих поисковой строке «example».

get_terms()

Метод get_terms() класса WP_Term_Query используется для выполнения запроса к базе данных WordPress и получения результатов в виде терминов (категорий, меток и т.д.).

Этот метод позволяет получить список терминов, удовлетворяющих определенным условиям, таким как идентификаторы, имена, родительские термины и т.д.

WP_Term_Query::get_terms( $args );

Метод get_terms() принимает один обязательный аргумент $args, который является массивом параметров запроса. В этом массиве вы можете указать различные параметры для фильтрации и сортировки терминов.

Например, вы можете указать параметр 'taxonomy' для указания таксономии, к которой относятся термины, или параметр 'include' для указания конкретных идентификаторов терминов, которые вы хотите получить.

Метод get_terms() возвращает массив терминов или количество терминов в виде числовой строки, если в параметрах запроса указано 'count'.

Каждый термин представлен объектом класса WP_Term, который содержит информацию о термине, такую как идентификатор, имя, слаг и т.д.

parse_order()

Метод parse_order() используется для разбора значения переменной запроса ‘order’ и приведения его к значениям ASC или DESC, если это необходимо.

WP_Term_Query::parse_order( string $order ): string

Метод parse_order() принимает один обязательный параметр:

  • $order (string) — Значение переменной запроса ‘order’.

$order (string) — Обязательный параметр. Значение переменной запроса ‘order’.

Метод parse_order() возвращает санитизированное значение переменной запроса ‘order’ в виде строки.

<code>$order = 'DESC'; // Значение переменной запроса 'order'
$term_query = new WP_Term_Query();
// Парсинг значения переменной запроса 'order'
$parsed_order = $term_query->parse_order( $order );</code>

В приведенном выше примере кода создается новый экземпляр класса WP_Term_Query. Затем, значение переменной запроса ‘order’ передается в метод parse_order(). Результатом выполнения метода будет санитизированное значение переменной запроса ‘order’, которое будет сохранено в переменной $parsed_order.

parse_orderby()

Метод parse_orderby() класса WP_Term_Query используется для разбора и очистки ключей orderby, переданных в запросе терминов.

WP_Term_Query::parse_orderby( string $orderby_raw ): string|false

Метод parse_orderby() принимает один обязательный параметр:

  • $orderby_raw (string) — Псевдоним для поля, по которому нужно сортировать.

$orderby_raw (string) — Обязательный. Псевдоним для поля, по которому нужно сортировать.

Метод parse_orderby() возвращает строку, которая будет использоваться в выражении ORDER BY. Возвращает false, если значение $orderby_raw не прошло очистку.

<?php
/**
 * Пример использования метода parse_orderby()
 */
// Псевдоним для поля, по которому нужно сортировать
$orderby_raw = 'name';
// Вызов метода parse_orderby()
$orderby = WP_Term_Query::parse_orderby( $orderby_raw );
// Вывод результата
echo $orderby;
?>

В данном примере мы используем метод parse_orderby() для разбора и очистки псевдонима поля 'name'. Результатом будет строка, которая будет использоваться в выражении ORDER BY.

parse_orderby_meta()

Метод parse_orderby_meta() используется для генерации фрагмента SQL-запроса ORDER BY для параметра orderby, который может быть связан с мета-запросом. Он преобразует сырое значение параметра orderby в фрагмент SQL-запроса, который будет использоваться для сортировки результатов запроса.

WP_Term_Query::parse_orderby_meta( string $orderby_raw ): string

Метод parse_orderby_meta() принимает один обязательный параметр:

  • $orderby_raw (string) — Сырое значение параметра orderby, переданное в WP_Term_Query.

$orderby_raw (string) — Обязательный. Сырое значение параметра orderby, переданное в WP_Term_Query.

Метод parse_orderby_meta() возвращает фрагмент SQL-запроса ORDER BY в виде строки.

<?php
// Параметры метода
$orderby_raw = 'meta_value_num';
// Генерация фрагмента SQL-запроса ORDER BY
$orderby = WP_Term_Query::parse_orderby_meta( $orderby_raw );
// Вывод результата
echo $orderby;
?>

В данном примере мы используем метод parse_orderby_meta() для генерации фрагмента SQL-запроса ORDER BY на основе сырого значения $orderby_raw. Результатом будет фрагмент SQL-запроса, который можно использовать для сортировки результатов запроса.

parse_query()

Метод parse_query() используется для разбора аргументов, переданных в запросе терминов, с использованием параметров запроса по умолчанию. Он принимает строку или массив аргументов запроса и возвращает объект WP_Term_Query с установленными параметрами запроса.

Метод parse_query() обрабатывает переданные аргументы и устанавливает значения для всех параметров запроса терминов. Он выполняет разбор аргументов, таких как таксономия, идентификаторы объектов, сортировка, фильтры и другие параметры, и устанавливает их в соответствующие свойства объекта WP_Term_Query.

Метод parse_query() используется для создания объекта WP_Term_Query с заданными параметрами запроса терминов. После создания объекта WP_Term_Query можно использовать его для выполнения запроса и получения результатов.

WP_Term_Query::parse_query( string|array $query = '' )
  • $query (строка или массив) — Опциональные аргументы запроса WP_Term_Query. См. WP_Term_Query::__construct() для получения дополнительных аргументов.
<?php
$args = array(
    'taxonomy' => 'category',
    'orderby' => 'name',
    'order' => 'ASC',
    'hide_empty' => true,
    'number' => 10,
    'fields' => 'all',
    'name__like' => 'example',
    'meta_key' => 'featured',
    'meta_value' => 'yes',
);
$query = WP_Term_Query::parse_query( $args );
// Выполнение запроса и получение результатов
$terms = $query->get_terms();
?>

В приведенном выше примере кода создается массив аргументов $args с различными параметрами запроса терминов. Затем метод parse_query() вызывается с этим массивом аргументов для создания объекта WP_Term_Query с заданными параметрами запроса.

После создания объекта WP_Term_Query можно использовать метод get_terms() для выполнения запроса и получения результатов. В этом примере результаты запроса сохраняются в переменной $terms.

populate_terms()

Метод populate_terms() создает массив объектов терминов из массива идентификаторов терминов. Он используется для заполнения объекта запроса терминов.

WP_Term_Query::populate_terms( Object[]|int[] $terms ): WP_Term[]

Метод populate_terms() принимает один обязательный параметр:

  • $terms (тип: Object[]|int[], обязательный) — Список объектов или идентификаторов терминов.

$terms (тип: Object[]|int[], обязательный) — Список объектов или идентификаторов терминов. Может принимать массив объектов терминов или массив идентификаторов терминов.

Метод populate_terms() возвращает массив объектов терминов (WP_Term[]).


$terms = array(
  (object) array(
    'term_id' => 1,
    'name' => 'Term 1',
    'slug' => 'term-1',
    'taxonomy' => 'category'
  ),
  (object) array(
    'term_id' => 2,
    'name' => 'Term 2',
    'slug' => 'term-2',
    'taxonomy' => 'category'
  )
);
$populated_terms = WP_Term_Query::populate_terms( $terms );

В приведенном выше примере кода создается массив объектов терминов $terms. Затем метод populate_terms() вызывается с этим массивом, и результат сохраняется в переменную $populated_terms. В результате будет создан массив объектов терминов, содержащий термины с указанными идентификаторами, именами, слагами и таксономиями.

query()

Метод query() класса WP_Term_Query устанавливает запрос и извлекает результаты. Он используется для выполнения запросов к таксономиям (терминам) в WordPress.

WP_Term_Query::query( string|array $query )

Метод query() принимает один обязательный параметр $query, который может быть массивом или строкой запроса в формате URL. Он содержит параметры запроса, которые определяют, какие термины будут извлечены.

$query (string|array) (обязательный): Массив или строка запроса в формате URL с параметрами запроса. Возможные параметры:

  • 'taxonomy' (string|array) — Таксономия или массив таксономий, к которым относятся термины.
  • 'include' (array|string|int) — Включить только указанные термины.
  • 'exclude' (array|string|int) — Исключить указанные термины.
  • 'exclude_tree' (array|string|int) — Исключить термины и их потомков.
  • 'number' (int) — Количество терминов для извлечения.
  • 'offset' (int) — Пропустить указанное количество терминов.
  • 'orderby' (string|array) — Сортировка терминов. По умолчанию: ‘name’.
  • 'order' (string) — Порядок сортировки. По умолчанию: ‘ASC’.
  • 'fields' (string) — Поля терминов для извлечения. По умолчанию: ‘all’.
  • 'count' (bool|int|string) — Вернуть только количество терминов. По умолчанию: false.
  • 'name__like' (string) — Вернуть термины, чьи названия содержат указанную строку.
  • 'parent' (int) — Вернуть термины, принадлежащие указанному родительскому термину.
  • 'child_of' (int) — Вернуть термины, являющиеся потомками указанного термина.
  • 'slug__in' (array|string) — Вернуть термины с указанными слагами.
  • 'slug__not_in' (array|string) — Исключить термины с указанными слагами.
  • 'meta_query' (array) — Массив параметров для мета-запроса.

Метод query() возвращает массив терминов (WP_Term[]), массив идентификаторов терминов (int[]), массив слагов терминов (string[]) или строку с числом терминов в виде числа, если в запросе указан параметр 'count'.

<?php
$args = array(
    'taxonomy' => 'category',
    'orderby' => 'name',
    'order' => 'ASC',
    'number' => 5,
    'fields' => 'all',
    'count' => false,
    'name__like' => 'example',
    'parent' => 0,
    'meta_query' => array(
        array(
            'key' => 'color',
            'value' => 'blue',
            'compare' => 'LIKE'
        )
    )
);
$terms = WP_Term_Query::query( $args );
?>

В приведенном выше примере кода выполняется запрос к таксономии «category» и извлекаются термины, удовлетворяющие указанным параметрам. Результат сохраняется в переменной $terms.

__construct()

Метод «__construct()» является конструктором класса «WP_Term_Query». Он используется для создания нового объекта запроса терминов (категорий).

Конструктор выполняет инициализацию объекта запроса терминов и принимает один параметр — массив или строку с параметрами запроса.

Метод «__construct()» выполняет следующие действия:

  • Инициализирует объект запроса терминов.
  • Устанавливает параметры запроса, если они переданы.
WP_Term_Query::__construct( string|array $query = '' )

Метод «__construct()» принимает один параметр — массив или строку с параметрами запроса. Параметр $query является необязательным и по умолчанию равен пустой строке.

Метод «__construct()» принимает следующие параметры:

  • $query (string|array) — Массив или строка с параметрами запроса терминов.
<?php
$args = array(
  'taxonomy' => 'category',
  'orderby' => 'name',
  'order' => 'ASC',
  'hide_empty' => true,
  'number' => 10
);
$query = new WP_Term_Query( $args );
?>

В приведенном выше примере кода создается новый объект запроса терминов с использованием класса «WP_Term_Query». Параметры запроса передаются в виде массива $args. В данном примере выполняется запрос категорий (таксономии «category») с сортировкой по имени в алфавитном порядке (параметр ‘orderby’ => ‘name’) в возрастающем порядке (параметр ‘order’ => ‘ASC’). Также скрываются пустые категории (параметр ‘hide_empty’ => true) и возвращается максимум 10 категорий (параметр ‘number’ => 10).

Примеры использования

Получение списка всех терминов


$args = array(
    'taxonomy' => 'category',
    'hide_empty' => false,
);
$term_query = new WP_Term_Query($args);
$terms = $term_query->get_terms();
if (!empty($terms)) {
    foreach ($terms as $term) {
        echo $term->name;
    }
}

В данном примере мы создаем новый объект класса WP_Term_Query с аргументами, указывающими на таксономию «category» и отображение пустых терминов. Затем мы получаем список терминов с помощью метода get_terms() и выводим их имена.

Форматирование результатов запроса


$args = array(
    'taxonomy' => 'category',
    'hide_empty' => false,
);
$term_query = new WP_Term_Query($args);
$terms = $term_query->get_terms();
if (!empty($terms)) {
    $formatted_terms = $term_query->format_terms($terms, 'name');
    foreach ($formatted_terms as $term_name) {
        echo $term_name;
    }
}

В этом примере мы используем метод format_terms(), чтобы отформатировать результаты запроса. Мы передаем список терминов и указываем, что нам нужно отформатировать их имена. Затем мы выводим отформатированные имена терминов.

Генерация ключа кэша


$args = array(
    'taxonomy' => 'category',
    'hide_empty' => false,
);
$term_query = new WP_Term_Query($args);
$cache_key = $term_query->generate_cache_key();
echo $cache_key;

В этом примере мы используем метод generate_cache_key(), чтобы сгенерировать ключ кэша для запроса. Мы выводим сгенерированный ключ кэша.

Генерация SQL-запроса для поиска


$args = array(
    'taxonomy' => 'category',
    'hide_empty' => false,
    'search' => 'example',
);
$term_query = new WP_Term_Query($args);
$search_sql = $term_query->get_search_sql();
echo $search_sql;

В этом примере мы используем метод get_search_sql(), чтобы сгенерировать SQL-запрос для поиска. Мы выводим сгенерированный SQL-запрос.

Сортировка результатов запроса


$args = array(
    'taxonomy' => 'category',
    'hide_empty' => false,
    'orderby' => 'name',
    'order' => 'ASC',
);
$term_query = new WP_Term_Query($args);
$terms = $term_query->get_terms();
if (!empty($terms)) {
    foreach ($terms as $term) {
        echo $term->name;
    }
}

В этом примере мы указываем сортировку результатов запроса по имени термина в порядке возрастания. Затем мы выводим имена отсортированных терминов.

Парсинг и обработка аргументов запроса


$args = array(
    'taxonomy' => 'category',
    'hide_empty' => false,
    'orderby' => 'name',
    'order' => 'ASC',
);
$term_query = new WP_Term_Query();
$parsed_args = $term_query->parse_query($args);
print_r($parsed_args);

В этом примере мы используем метод parse_query(), чтобы распарсить и обработать аргументы запроса. Мы выводим распарсенные аргументы.

Создание массива объектов терминов


$term_ids = array(1, 2, 3);
$term_query = new WP_Term_Query();
$terms = $term_query->populate_terms($term_ids);
if (!empty($terms)) {
    foreach ($terms as $term) {
        echo $term->name;
    }
}

В этом примере мы создаем массив идентификаторов терминов и используем метод populate_terms(), чтобы создать массив объектов терминов на основе этих идентификаторов. Затем мы выводим имена терминов.

Вопросы и ответы

Как получить список терминов с помощью WP_Term_Query?

Для получения списка терминов с помощью класса WP_Term_Query необходимо создать экземпляр этого класса и вызвать метод get_terms().


$args = array(
    'taxonomy' => 'category',
    'hide_empty' => false,
);
$query = new WP_Term_Query($args);
$terms = $query->get_terms();

Как отформатировать результаты запроса WP_Term_Query в нужном формате?

Для форматирования результатов запроса WP_Term_Query можно использовать метод format_terms(). Этот метод принимает массив терминов и форматирует их в соответствии с указанными параметрами.


$args = array(
    'taxonomy' => 'category',
    'hide_empty' => false,
);
$query = new WP_Term_Query($args);
$terms = $query->get_terms();
$formatted_terms = $query->format_terms($terms);

Как сгенерировать ключ кэша для запроса WP_Term_Query?

Для генерации ключа кэша для запроса WP_Term_Query можно использовать метод generate_cache_key(). Этот метод принимает массив аргументов запроса и возвращает строку, которую можно использовать в качестве ключа кэша.


$args = array(
    'taxonomy' => 'category',
    'hide_empty' => false,
);
$query = new WP_Term_Query($args);
$cache_key = $query->generate_cache_key($args);

Как выполнить поиск по терминам с помощью WP_Term_Query?

Для выполнения поиска по терминам с помощью класса WP_Term_Query можно использовать метод get_search_sql(). Этот метод принимает строку поискового запроса и возвращает SQL-запрос, который можно использовать для поиска терминов.


$search_query = 'example';
$query = new WP_Term_Query();
$search_sql = $query->get_search_sql($search_query);

Как сортировать результаты запроса WP_Term_Query по определенному полю?

Для сортировки результатов запроса WP_Term_Query по определенному полю необходимо использовать параметр ‘orderby’. Этот параметр принимает значение поля, по которому нужно отсортировать результаты. Допустимые значения поля: ‘name’, ‘slug’, ‘term_group’, ‘term_id’, ‘id’, ‘description’, ‘parent’, ‘count’.

Пример сортировки результатов по полю ‘name’:


$args = array(
    'orderby' => 'name',
    'order' => 'ASC',
);
$query = new WP_Term_Query( $args );

Как использовать мета-запросы в WP_Term_Query?

Для использования мета-запросов в WP_Term_Query необходимо использовать параметр ‘meta_query’. Этот параметр принимает массив с параметрами мета-запроса. Каждый элемент массива представляет собой массив с параметрами одного мета-запроса.

Пример использования мета-запросов:


$args = array(
    'meta_query' => array(
        array(
            'key' => 'color',
            'value' => 'blue',
            'compare' => 'LIKE',
        ),
    ),
);
$query = new WP_Term_Query( $args );

Как создать массив объектов терминов из массива идентификаторов терминов?

Для создания массива объектов терминов из массива идентификаторов терминов можно использовать метод ‘populate_terms’ класса WP_Term_Query. Этот метод принимает массив идентификаторов терминов и возвращает массив объектов терминов.

Пример создания массива объектов терминов:


$term_ids = array( 1, 2, 3 );
$terms = ( new WP_Term_Query )->populate_terms( $term_ids );

Как настроить и выполнить запрос WP_Term_Query?

Для настройки и выполнения запроса WP_Term_Query необходимо создать объект класса WP_Term_Query и передать ему массив аргументов с настройками запроса. Затем вызвать метод ‘get_terms’ объекта WP_Term_Query для выполнения запроса и получения результатов.

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


$args = array(
    'taxonomy' => 'category',
    'hide_empty' => false,
);
$query = new WP_Term_Query( $args );
$terms = $query->get_terms();

Класс WP_Term_Query предоставляет мощный инструмент для выполнения запросов к таксономиям WordPress. С его помощью можно легко сортировать результаты запросов, использовать мета-запросы, создавать массивы объектов терминов и выполнять запросы с различными настройками. Этот класс является важной частью разработки на WordPress и позволяет эффективно работать с таксономиями и терминами.

Обсуждение