WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru
функция не описана

WP_Tax_Query::transform_query() public WP 3.2.0

Transforms a single query, from one field to another.

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

{} Это метод класса: WP_Tax_Query{}

Хуков нет.

Возвращает

Null. Ничего.

Использование

$WP_Tax_Query = new WP_Tax_Query();
$WP_Tax_Query->transform_query( $query, $resulting_field );
$query(массив) (обязательный) (передается по ссылке — &)
The single query. Passed by reference.
$resulting_field(строка) (обязательный)
The resulting field. Accepts 'slug', 'name', 'term_taxonomy_id', or 'term_id'.
По умолчанию: 'term_id'

Заметки

  • Global. wpdb. $wpdb The WordPress database abstraction object.

Список изменений

С версии 3.2.0 Введена.

Код WP_Tax_Query::transform_query() WP 5.5.3

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

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