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

rest_filter_response_by_context() WP 5.5.0

Filters the response to remove any fields not available in the given context.

Хуков нет.

Возвращает

Массив/Объект. The filtered response data.

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

rest_filter_response_by_context( $data, $schema, $context );
$data(массив/объект) (обязательный)
The response data to modify.
$schema(массив) (обязательный)
The schema for the endpoint used to filter the response.
$context(строка) (обязательный)
The requested context.

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

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

Код rest_filter_response_by_context() WP 5.5.1

wp-includes/rest-api.php
<?php
function rest_filter_response_by_context( $data, $schema, $context ) {
	if ( ! is_array( $data ) && ! is_object( $data ) ) {
		return $data;
	}

	if ( isset( $schema['type'] ) ) {
		$type = $schema['type'];
	} elseif ( isset( $schema['properties'] ) ) {
		$type = 'object'; // Back compat if a developer accidentally omitted the type.
	} else {
		return $data;
	}

	$is_array_type  = 'array' === $type || ( is_array( $type ) && in_array( 'array', $type, true ) );
	$is_object_type = 'object' === $type || ( is_array( $type ) && in_array( 'object', $type, true ) );

	if ( $is_array_type && $is_object_type ) {
		if ( rest_is_array( $data ) ) {
			$is_object_type = false;
		} else {
			$is_array_type = false;
		}
	}

	$has_additional_properties = $is_object_type && isset( $schema['additionalProperties'] ) && is_array( $schema['additionalProperties'] );

	foreach ( $data as $key => $value ) {
		$check = array();

		if ( $is_array_type ) {
			$check = isset( $schema['items'] ) ? $schema['items'] : array();
		} elseif ( $is_object_type ) {
			if ( isset( $schema['properties'][ $key ] ) ) {
				$check = $schema['properties'][ $key ];
			} elseif ( $has_additional_properties ) {
				$check = $schema['additionalProperties'];
			}
		}

		if ( ! isset( $check['context'] ) ) {
			continue;
		}

		if ( ! in_array( $context, $check['context'], true ) ) {
			if ( $is_array_type ) {
				// All array items share schema, so there's no need to check each one.
				$data = array();
				break;
			}

			if ( is_object( $data ) ) {
				unset( $data->$key );
			} else {
				unset( $data[ $key ] );
			}
		} elseif ( is_array( $value ) || is_object( $value ) ) {
			$new_value = rest_filter_response_by_context( $value, $check, $context );

			if ( is_object( $data ) ) {
				$data->$key = $new_value;
			} else {
				$data[ $key ] = $new_value;
			}
		}
	}

	return $data;
}