WP_Meta_Query::sanitize_query()publicWP 4.1.0

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

Eliminates empty items and ensures that a 'relation' is set.

Method of the class: WP_Meta_Query{}

No Hooks.

Return

Array. Sanitized array of query clauses.

Usage

$WP_Meta_Query = new WP_Meta_Query();
$WP_Meta_Query->sanitize_query( $queries );
$queries(array) (required)
Array of query clauses.

Changelog

Since 4.1.0 Introduced.

WP_Meta_Query::sanitize_query() code WP 6.5.2

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;
}