Title: WP_Meta_Query::sanitize_query
Published: December 18, 2014
Last modified: April 28, 2025

---

# WP_Meta_Query::sanitize_query( array $queries ): array

## In this article

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

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

Ensures the ‘meta_query’ argument passed to the class constructor is well-formed.

## 󠀁[Description](https://developer.wordpress.org/reference/classes/wp_meta_query/sanitize_query/?output_format=md#description)󠁿

Eliminates empty items and ensures that a ‘relation’ is set.

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

 `$queries`arrayrequired

Array of query clauses.

## 󠀁[Return](https://developer.wordpress.org/reference/classes/wp_meta_query/sanitize_query/?output_format=md#return)󠁿

 array Sanitized array of query clauses.

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

    ```php
    public function sanitize_query( $queries ) {
    	$clean_queries = array();

    	if ( ! is_array( $queries ) ) {
    		return $clean_queries;
    	}

    	foreach ( $queries as $key => $query ) {
    		if ( 'relation' === $key ) {
    			$relation = $query;

    		} elseif ( ! is_array( $query ) ) {
    			continue;

    			// First-order clause.
    		} elseif ( $this->is_first_order_clause( $query ) ) {
    			if ( isset( $query['value'] ) && array() === $query['value'] ) {
    				unset( $query['value'] );
    			}

    			$clean_queries[ $key ] = $query;

    			// Otherwise, it's a nested query, so we recurse.
    		} else {
    			$cleaned_query = $this->sanitize_query( $query );

    			if ( ! empty( $cleaned_query ) ) {
    				$clean_queries[ $key ] = $cleaned_query;
    			}
    		}
    	}

    	if ( empty( $clean_queries ) ) {
    		return $clean_queries;
    	}

    	// Sanitize the 'relation' key provided in the query.
    	if ( isset( $relation ) && 'OR' === strtoupper( $relation ) ) {
    		$clean_queries['relation'] = 'OR';
    		$this->has_or_relation     = true;

    		/*
    		* If there is only a single clause, call the relation 'OR'.
    		* This value will not actually be used to join clauses, but it
    		* simplifies the logic around combining key-only queries.
    		*/
    	} elseif ( 1 === count( $clean_queries ) ) {
    		$clean_queries['relation'] = 'OR';

    		// Default to AND.
    	} else {
    		$clean_queries['relation'] = 'AND';
    	}

    	return $clean_queries;
    }
    ```

[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#L192)
[View on GitHub](https://github.com/WordPress/wordpress-develop/blob/6.9.4/src/wp-includes/class-wp-meta-query.php#L192-L247)

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

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

Determines whether a query clause is first-order.

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

Ensures the ‘meta_query’ argument passed to the class constructor is well-formed.

  |

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

Ensures the ‘meta_query’ argument passed to the class constructor is well-formed.

  | 
| [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/sanitize_query/?output_format=md#changelog)󠁿

| Version | Description | 
| [4.1.0](https://developer.wordpress.org/reference/since/4.1.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%2Fsanitize_query%2F)
before being able to contribute a note or feedback.