BP_XProfile_Meta_Query::get_sql( string $type, string $primary_table, string $primary_id_column, object|null $context = null )

Generates SQL clauses to be appended to a main query.

Parameters Parameters


(string) (Required) Type of meta, eg 'user', 'post'.


(string) (Required) Database table where the object being filtered is stored (eg wp_users).


(string) (Required) ID column for the filtered object in $primary_table.


(object|null) (Optional) The main query object.

Default value: null

Top ↑

Return Return

(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 Source

File: bp-xprofile/classes/class-bp-xprofile-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->meta_table     = $meta_table;
		$this->meta_id_column = 'object_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'] );

		 * Filter the meta query's generated SQL.
		 * @since 2.3.0
		 * @param array $args {
		 *     An array of meta query SQL arguments.
		 *     @type array  $clauses           Array containing the query's JOIN and WHERE clauses.
		 *     @type array  $queries           Array of meta queries.
		 *     @type string $type              Type of meta.
		 *     @type string $primary_table     Primary table.
		 *     @type string $primary_id_column Primary column ID.
		 *     @type object $context           The main query object.
		 * }
		return apply_filters_ref_array( 'bp_xprofile_get_meta_sql', array( $sql, $this->queries, $type, $primary_table, $primary_id_column, $context ) );

Top ↑

Changelog Changelog

Version Description
2.3.0 Introduced.

Top ↑

User Contributed Notes User Contributed Notes

You must log in before being able to contribute a note or feedback.