WP_Tax_Query::transform_query( array $query, string $resulting_field )

In this article

Transforms a single query, from one field to another.

Description

Operates on the $query object by reference. In the case of error, $query is converted to a WP_Error object.

Parameters

$queryarrayrequired
The single query. Passed by reference.
$resulting_fieldstringrequired
The resulting field. Accepts 'slug', 'name', 'term_taxonomy_id', or 'term_id'. Default 'term_id'.

Source

public function transform_query( &$query, $resulting_field ) {	if ( empty( $query['terms'] ) ) {	return;	}	if ( $query['field'] === $resulting_field ) {	return;	}	$resulting_field = sanitize_key( $resulting_field );	// Empty 'terms' always results in a null transformation.	$terms = array_filter( $query['terms'] );	if ( empty( $terms ) ) {	$query['terms'] = array();	$query['field'] = $resulting_field;	return;	}	$args = array(	'get' => 'all',	'number' => 0,	'taxonomy' => $query['taxonomy'],	'update_term_meta_cache' => false,	'orderby' => 'none',	);	// Term query parameter name depends on the 'field' being searched on.	switch ( $query['field'] ) {	case 'slug':	$args['slug'] = $terms;	break;	case 'name':	$args['name'] = $terms;	break;	case 'term_taxonomy_id':	$args['term_taxonomy_id'] = $terms;	break;	default:	$args['include'] = wp_parse_id_list( $terms );	break;	}	if ( ! is_taxonomy_hierarchical( $query['taxonomy'] ) ) {	$args['number'] = count( $terms );	}	$term_query = new WP_Term_Query();	$term_list = $term_query->query( $args );	if ( is_wp_error( $term_list ) ) {	$query = $term_list;	return;	}	if ( 'AND' === $query['operator'] && count( $term_list ) < count( $query['terms'] ) ) {	$query = new WP_Error( 'inexistent_terms', __( 'Inexistent terms.' ) );	return;	}	$query['terms'] = wp_list_pluck( $term_list, $resulting_field );	$query['field'] = $resulting_field; } 

Changelog

VersionDescription
3.2.0Introduced.

User Contributed Notes

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