The get_meta_sql() WordPress PHP function generates SQL clauses based on a given meta query, which can then be appended to a main query.
Usage
get_meta_sql( $meta_query, $type, $primary_table, $primary_id_column, $context = null );
Example:
$meta_query = array(
array(
'key' => 'color',
'value' => 'blue',
'compare' => 'NOT LIKE'
)
);
global $wpdb;
$meta_sql = get_meta_sql( $meta_query, 'post', $wpdb->posts, 'ID' );
Parameters
$meta_query (array)– Required. A meta query.$type (string)– Required. Type of meta.$primary_table (string)– Required. Primary database table name.$primary_id_column (string)– Required. Primary ID column name.$context (object)– Optional. The main query object. Default: null.
More information
See WordPress Developer Resources: get_meta_sql()
Examples
Filter posts by a custom field value
// Get posts with a specific custom field value
$meta_query = array(
array(
'key' => 'author_name',
'value' => 'John Doe',
'compare' => '='
)
);
global $wpdb;
$meta_sql = get_meta_sql( $meta_query, 'post', $wpdb->posts, 'ID' );
Filter posts with a custom field value between two values
// Get posts with a custom field value between two values
$meta_query = array(
array(
'key' => 'price',
'value' => array(100, 500),
'compare' => 'BETWEEN'
)
);
global $wpdb;
$meta_sql = get_meta_sql( $meta_query, 'post', $wpdb->posts, 'ID' );
Filter posts with multiple custom field conditions
// Get posts with multiple custom field conditions
$meta_query = array(
'relation' => 'AND',
array(
'key' => 'color',
'value' => 'red',
'compare' => '='
),
array(
'key' => 'size',
'value' => 'large',
'compare' => '='
)
);
global $wpdb;
$meta_sql = get_meta_sql( $meta_query, 'post', $wpdb->posts, 'ID' );
Filter posts with a custom field value that does not exist
// Get posts with a custom field value that does not exist
$meta_query = array(
array(
'key' => 'featured',
'compare' => 'NOT EXISTS'
)
);
global $wpdb;
$meta_sql = get_meta_sql( $meta_query, 'post', $wpdb->posts, 'ID' );
Filter users by a custom user meta value
// Get users with a specific custom user meta value
$meta_query = array(
array(
'key' => 'user_role',
'value' => 'editor',
'compare' => '='
)
);
global $wpdb;
$meta_sql = get_meta_sql( $meta_query, 'user', $wpdb->users, 'ID' );