WP_Meta_Query: Понимаем мета-запросы в WordPress
WP_Meta_Query — это класс, который используется для создания мета-запросов в WordPress. Он помогает фильтровать результаты запросов по метаданным, что позволяет находить записи на основе ключей и значений, связанных с ними.
Что такое мета-запросы?
Мета-запросы позволяют вам фильтровать данные в WordPress по дополнительным полям, хранящимся в базе данных. Например, вы можете искать записи (посты, страницы и т.д.) с определёнными метаданными, такими как автор, дата создания или другие пользовательские поля.
Как работает WP_Meta_Query?
Класс WP_Meta_Query генерирует SQL-коды, которые добавляются к основному запросу. Он использует JOIN и WHERE операторы для фильтрации результатов. Это значит, что он соединяет таблицы базы данных, чтобы убедиться, что вы получаете только те данные, которые вам нужны.
Пример использования
Вот пример, как можно создать мета-запрос с помощью класса WP_Meta_Query:
$meta_query = array(
'relation' => 'OR', // Связь между запросами, по умолчанию 'AND'
array(
'key' => 'key_name', // Ключ метаданных
'value' => 'field value', // Значение метаданных
'compare' => '=' // Оператор сравнения
)
);
$query_obj = new WP_Meta_Query( $meta_query );
$mq_sql = $query_obj->get_sql( 'post', 'wp_posts', 'ID' );
// Использование в основном запросе
$mq_sql['join'];
$mq_sql['where'];
В результате, переменная $mq_sql
будет содержать массив с SQL-кодом для JOIN и WHERE:
Array
(
[join] => INNER JOIN wp_postmeta ON ( wp_posts.ID = wp_postmeta.post_id )
[where] => AND (
( wp_postmeta.meta_key = 'key_name' AND CAST(wp_postmeta.meta_value AS CHAR) = 'field value' )
)
)
Методы класса WP_Meta_Query
Вот основные методы, которые вы можете использовать с классом WP_Meta_Query:
- __construct( $meta_query = false ) — Конструктор класса, принимает мета-запрос.
- find_compatible_table_alias( $clause, $parent_query ) — Находит совместимый псевдоним ��аблицы для соединения.
- get_cast_for_type( $type = '' ) — Получает правильный тип данных для метаданных.
- get_clauses() — Возвращает список заявок.
- get_sql( $type, $primary_table, $primary_id_column, $context = null ) — Генерирует SQL-код для основного запроса.
- sanitize_query( $queries ) — Очищает и проверяет мета-запрос.
- parse_query_vars( $qv ) — Обрабатывает переменные запроса.
- has_or_relation() — Проверяет, есть ли в запросе связь "ИЛИ".
Пример более сложного мета-запроса
Вы можете создавать более сложные запросы, используя вложенные массивы. Например, если вам нужно получить записи с двумя разными метаданными:
$args = array(
'post_type' => 'mypost',
'meta_query' => array(
'relation' => 'AND',
array(
'relation' => 'OR',
array(
'key' => 'material',
'value' => 'concrete',
),
array(
'key' => 'material',
'compare' => 'NOT EXISTS'
),
),
array(
'key' => 'color',
'value' => 'gray',
),
array(
'key' => 'weight',
'value' => '200',
),
)
);
$meta_query = new WP_Meta_Query();
$meta_query->parse_query_vars( $args );
$mq_sql = $meta_query->get_sql( 'post', $wpdb->posts, 'ID' );
Заключение
WP_Meta_Query — мощный инструмент для работы с метаданными в WordPress. Он позволяет создать сложные запросы к базе данных, которые могут значительно упростить работу с данными. Используя его возможности, вы можете находить нужные записи, основываясь на разнообразных дополнительных полях.