WP_Meta_Query::get_sql( string $type, string $primary_table, string $primary_id_column, object $context = null )
Generates SQL clauses to be appended to a main query.
Parameters
- $type
-
(Required) Type of meta, eg 'user', 'post'.
- $primary_table
-
(Required) Database table where the object being filtered is stored (eg wp_users).
- $primary_id_column
-
(Required) ID column for the filtered object in $primary_table.
- $context
-
(Optional) The main query object.
Default value: null
Return
(false|array) Array containing JOIN and WHERE SQL clauses to append to the main query.
- 'join'
(string) SQL fragment to append to the main JOIN clause. - 'where'
(string) SQL fragment to append to the main WHERE clause.
Source
File: wp-includes/class-wp-meta-query.php
public function get_sql( $type, $primary_table, $primary_id_column, $context = null ) {
if ( ! $meta_table = _get_meta_table( $type ) ) {
return false;
}
$this->table_aliases = array();
$this->meta_table = $meta_table;
$this->meta_id_column = sanitize_key( $type . '_id' );
$this->primary_table = $primary_table;
$this->primary_id_column = $primary_id_column;
$sql = $this->get_sql_clauses();
/*
* If any JOINs are LEFT JOINs (as in the case of NOT EXISTS), then all JOINs should
* be LEFT. Otherwise posts with no metadata will be excluded from results.
*/
if ( false !== strpos( $sql['join'], 'LEFT JOIN' ) ) {
$sql['join'] = str_replace( 'INNER JOIN', 'LEFT JOIN', $sql['join'] );
}
/**
* Filters the meta query's generated SQL.
*
* @since WP-3.1.0
*
* @param array $clauses Array containing the query's JOIN and WHERE clauses.
* @param array $queries Array of meta queries.
* @param string $type Type of meta.
* @param string $primary_table Primary table.
* @param string $primary_id_column Primary column ID.
* @param object $context The main query object.
*/
return apply_filters_ref_array( 'get_meta_sql', array( $sql, $this->queries, $type, $primary_table, $primary_id_column, $context ) );
}
Changelog
Version | Description |
---|---|
WP-3.2.0 | Introduced. |