public function where_meta( $query, MetaTable $table = null, $meta_type = '' ) {

		if ( ! $table && $this->model && method_exists( $this->model, 'get_meta_table' ) ) {
			$table = call_user_func( array( $this->model, 'get_meta_table' ) );
		}

		if ( ! $meta_type && $this->model && method_exists( $this->model, 'get_meta_type' ) ) {
			$meta_type = call_user_func( array( $this->model, 'get_meta_type' ) );
		}

		if ( ! $table ) {
			throw new \InvalidArgumentException( "MetaTable can't be determined from the given arguments." );
		}

		if ( ! $meta_type ) {
			throw new \InvalidArgumentException( "\$meta_type can't be determined from the given arguments." );
		}

		if ( ! $query instanceof \WP_Meta_Query ) {
			$query = new \WP_Meta_Query( $query );
		}

		$fn = function ( $key, $original ) use ( $table, $meta_type ) {

			if ( $original === $meta_type . '_id' ) {
				$key = $table->get_primary_id_column();
			}

			return $key;
		};

		add_filter( 'sanitize_key', $fn, 10, 2 );

		$sql = $query->get_sql(
			$meta_type,
			$this->alias,
			$this->table->get_primary_key()
		);

		remove_filter( 'sanitize_key', $fn, 10 );

		$this->meta_join = $sql['join'];

		$where = $sql['where'];
		$where = preg_replace( '/^\sAND\s/', '', $where );

		if ( $this->where ) {
			$this->where->qAnd( new Where_Raw( $where ) );
		} else {
			$this->where = new Where_Raw( $where );
		}

		return $this;
	}
public function where_meta( $query, MetaTable $table = null, $meta_type = '' ) {

		if ( ! $table && $this->model && method_exists( $this->model, 'get_meta_table' ) ) {
			$table = call_user_func( array( $this->model, 'get_meta_table' ) );
		}

		if ( ! $meta_type && $this->model && method_exists( $this->model, 'get_meta_type' ) ) {
			$meta_type = call_user_func( array( $this->model, 'get_meta_type' ) );
		}

		if ( ! $table ) {
			throw new \InvalidArgumentException( "MetaTable can't be determined from the given arguments." );
		}

		if ( ! $meta_type ) {
			throw new \InvalidArgumentException( "\$meta_type can't be determined from the given arguments." );
		}

		if ( ! $query instanceof \WP_Meta_Query ) {
			$query = new \WP_Meta_Query( $query );
		}

		$fn = function ( $key, $original ) use ( $table, $meta_type ) {

			if ( $original === $meta_type . '_id' ) {
				$key = $table->get_primary_id_column();
			}

			return $key;
		};

		add_filter( 'sanitize_key', $fn, 10, 2 );

		$sql = $query->get_sql(
			$meta_type,
			$this->alias,
			$this->table->get_primary_key()
		);

		remove_filter( 'sanitize_key', $fn, 10 );

		$this->meta_join = $sql['join'];

		$where = $sql['where'];
		$where = preg_replace( '/^\sAND\s/', '', $where );

		if ( $this->where ) {
			$this->where->qAnd( new Where_Raw( $where ) );
		} else {
			$this->where = new Where_Raw( $where );
		}

		return $this;
	}
public function where_meta ( $ query , MetaTable $ table = null , $ meta_type = '' ) { if ( ! $ table && $ this -> model && method_exists ( $ this -> model , 'get_meta_table' ) ) { $ table = call_user_func ( array ( $ this -> model , 'get_meta_table' ) ) ; } if ( ! $ meta_type && $ this -> model && method_exists ( $ this -> model , 'get_meta_type' ) ) { $ meta_type = call_user_func ( array ( $ this -> model , 'get_meta_type' ) ) ; } if ( ! $ table ) { throw new \ InvalidArgumentException ( "MetaTable can't be determined from the given arguments." ) ; } if ( ! $ meta_type ) { throw new \ InvalidArgumentException ( "\$meta_type can't be determined from the given arguments." ) ; } if ( ! $ query instanceof \ WP_Meta_Query ) { $ query = new \ WP_Meta_Query ( $ query ) ; } $ fn = function ( $ key , $ original ) use ( $ table , $ meta_type ) { if ( $ original === $ meta_type . '_id' ) { $ key = $ table -> get_primary_id_column ( ) ; } return $ key ; } ; add_filter ( 'sanitize_key' , $ fn , 10 , 2 ) ; $ sql = $ query -> get_sql ( $ meta_type , $ this -> alias , $ this -> table -> get_primary_key ( ) ) ; remove_filter ( 'sanitize_key' , $ fn , 10 ) ; $ this -> meta_join = $ sql [ 'join' ] ; $ where = $ sql [ 'where' ] ; $ where = preg_replace ( '/^\sAND\s/' , '' , $ where ) ; if ( $ this -> where ) { $ this -> where -> qAnd ( new Where_Raw ( $ where ) ) ; } else { $ this -> where = new Where_Raw ( $ where ) ; } return $ this ; }
Perform a meta query.

@since 2.0

@param array|\WP_Meta_Query $query
@param MetaTable|null       $table     Table metadata is stored in. If not specified, will be retrieved from the
model.
@param string               $meta_type Type of metadata. Will be determined from the model if not given.

@return $this

@throws \InvalidArgumentException If a MetaTable or $meta_type can't be determined.
Perform a meta query .