get_meta_sql()
По переданным параметрам создает JOIN и WHERE части SQL запроса для метаданных, которые можно использовать в основном запросе.
Это обертка для класса WP_Meta_Query.
Работает на основе: WP_Meta_Query()
1 раз — 0.000172 сек (быстро) | 50000 раз — 4.48 сек (быстро)
Хуков нет.
Возвращает
Строку[]|false
. Асоциативный массив с JOIN и WHERE ключами:
array( 'join' => 'JOIN SQL строка', 'where' => 'WHERE SQL строка' )
Использование
get_meta_sql( $meta_query, $type, $primary_table, $primary_id_column, $context );
- $meta_query(массив) (обязательный)
- Параметры запроса. Смотрите описание WP_Meta_Query.
- $type(строка) (обязательный)
- Тип метаданных. Например: 'user', 'post', 'comment'.
В объекте $wpdb должна быть зарегистрирована таблица с названием: $type .'meta', например, если мы укажем тут 'foo' то должна существовать таблица $wpdb->foometa. Если такой таблицы нет, то этот класс работать не будет! - $primary_table(строка) (обязательный)
- Название основной таблицы, к которой относится таблица метаданных. Например wp_posts, wp_comments, wp_users.
- $primary_id_column(строка) (обязательный)
- Название ключевой колонки основной таблицы, указанной в $primary_table. Для wp_posts - ID, для wp_users - ID, для wp_comments - comment_ID.
- $context(объект)
- Объект основного запроса. Этот параметр нигде не используется, а передается в фильтр
get_meta_sql
.
По умолчанию: null
Примеры
#1 Демонстрация использования
$meta_query = array( array( 'key' => 'key_name', 'value' => 'значение поля', 'compare' => '=' // не обязательно, по умолчанию '=' или 'IN' (если value массив) ) ); $mq_sql = get_meta_sql( $meta_query, 'post', 'wp_posts', 'ID' );
$mq_sql будет содержать:
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) = 'значение поля' ) ) )
#2 Еще примеры
Смотрите в описании WP_Meta_Query
Заметки
- Смотрите: WP_Meta_Query
Список изменений
С версии 3.2.0 | Введена. |
Код get_meta_sql() get meta sql WP 6.6.2
function get_meta_sql( $meta_query, $type, $primary_table, $primary_id_column, $context = null ) { $meta_query_obj = new WP_Meta_Query( $meta_query ); return $meta_query_obj->get_sql( $type, $primary_table, $primary_id_column, $context ); }