get_meta_sql()WP 3.2.0

По переданным параметрам создает 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

Примеры

0

#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) = 'значение поля' )
	)
)
0

#2 Еще примеры

Смотрите в описании WP_Meta_Query

Заметки

Список изменений

С версии 3.2.0 Введена.

Код get_meta_sql() WP 6.5.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 );
}