Title: WP_Meta_Query::parse_query_vars
Published: April 25, 2014
Last modified: April 28, 2025

---

# WP_Meta_Query::parse_query_vars( array $qv )

## In this article

 * [Parameters](https://developer.wordpress.org/reference/classes/wp_meta_query/parse_query_vars/?output_format=md#parameters)
 * [Source](https://developer.wordpress.org/reference/classes/wp_meta_query/parse_query_vars/?output_format=md#source)
 * [Related](https://developer.wordpress.org/reference/classes/wp_meta_query/parse_query_vars/?output_format=md#related)
 * [Changelog](https://developer.wordpress.org/reference/classes/wp_meta_query/parse_query_vars/?output_format=md#changelog)

[ Back to top](https://developer.wordpress.org/reference/classes/wp_meta_query/parse_query_vars/?output_format=md#wp--skip-link--target)

Constructs a meta query based on ‘meta_*’ query vars

## 󠀁[Parameters](https://developer.wordpress.org/reference/classes/wp_meta_query/parse_query_vars/?output_format=md#parameters)󠁿

 `$qv`arrayrequired

The query variables.

## 󠀁[Source](https://developer.wordpress.org/reference/classes/wp_meta_query/parse_query_vars/?output_format=md#source)󠁿

    ```php
    public function parse_query_vars( $qv ) {
    	$meta_query = array();

    	/*
    	 * For orderby=meta_value to work correctly, simple query needs to be
    	 * first (so that its table join is against an unaliased meta table) and
    	 * needs to be its own clause (so it doesn't interfere with the logic of
    	 * the rest of the meta_query).
    	 */
    	$primary_meta_query = array();
    	foreach ( array( 'key', 'compare', 'type', 'compare_key', 'type_key' ) as $key ) {
    		if ( ! empty( $qv[ "meta_$key" ] ) ) {
    			$primary_meta_query[ $key ] = $qv[ "meta_$key" ];
    		}
    	}

    	// WP_Query sets 'meta_value' = '' by default.
    	if ( isset( $qv['meta_value'] ) && '' !== $qv['meta_value'] && ( ! is_array( $qv['meta_value'] ) || $qv['meta_value'] ) ) {
    		$primary_meta_query['value'] = $qv['meta_value'];
    	}

    	$existing_meta_query = isset( $qv['meta_query'] ) && is_array( $qv['meta_query'] ) ? $qv['meta_query'] : array();

    	if ( ! empty( $primary_meta_query ) && ! empty( $existing_meta_query ) ) {
    		$meta_query = array(
    			'relation' => 'AND',
    			$primary_meta_query,
    			$existing_meta_query,
    		);
    	} elseif ( ! empty( $primary_meta_query ) ) {
    		$meta_query = array(
    			$primary_meta_query,
    		);
    	} elseif ( ! empty( $existing_meta_query ) ) {
    		$meta_query = $existing_meta_query;
    	}

    	$this->__construct( $meta_query );
    }
    ```

[View all references](https://developer.wordpress.org/reference/files/wp-includes/class-wp-meta-query.php/)
[View on Trac](https://core.trac.wordpress.org/browser/tags/6.9.4/src/wp-includes/class-wp-meta-query.php#L271)
[View on GitHub](https://github.com/WordPress/wordpress-develop/blob/6.9.4/src/wp-includes/class-wp-meta-query.php#L271-L309)

## 󠀁[Related](https://developer.wordpress.org/reference/classes/wp_meta_query/parse_query_vars/?output_format=md#related)󠁿

| Uses | Description | 
| [WP_Meta_Query::__construct()](https://developer.wordpress.org/reference/classes/wp_meta_query/__construct/)`wp-includes/class-wp-meta-query.php` |

Constructor.

  |

## 󠀁[Changelog](https://developer.wordpress.org/reference/classes/wp_meta_query/parse_query_vars/?output_format=md#changelog)󠁿

| Version | Description | 
| [3.2.0](https://developer.wordpress.org/reference/since/3.2.0/) | Introduced. |

## User Contributed Notes

You must [log in](https://login.wordpress.org/?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Fclasses%2Fwp_meta_query%2Fparse_query_vars%2F)
before being able to contribute a note or feedback.