# rest_find_one_matching_schema()

URL: https://chugunov.pro/api-wordpress/functions/rest_find_one_matching_schema/
Проверено на WordPress 6.9, обновлено 06.08.2026.
Источник: независимый русскоязычный справочник chugunov.pro. Не является официальной документацией WordPress.

Тип: функция.
Появился в версии: 5.6.0.

## Сигнатура

```php
rest_find_one_matching_schema( mixed $value, array $args, string $param, bool $stop_after_first_match = false ): array|WP_Error
```

## Описание

Находит подходящую схему среди схем «oneOf».

## Параметры

- `$value` `mixed` — обязательный. Значение для проверки.
- `$args` `array` — обязательный. Используемый массив схемы.
- `$param` `string` — обязательный. Имя параметра, используемое в сообщениях об ошибках.
- `$stop_after_first_match` `bool` — необязательный, по умолчанию `false`. Следует ли останавливать процесс после первого успешного совпадения.

## Возвращаемое значение

`array|WP_Error` — WP_Error

## Исходный код

Файл: `wp-includes/rest-api.php:1980`

```php
function rest_find_one_matching_schema( $value, $args, $param, $stop_after_first_match = false ) {
	$matching_schemas = array();
	$errors           = array();

	foreach ( $args['oneOf'] as $index => $schema ) {
		if ( ! isset( $schema['type'] ) && isset( $args['type'] ) ) {
			$schema['type'] = $args['type'];
		}

		$is_valid = rest_validate_value_from_schema( $value, $schema, $param );
		if ( ! is_wp_error( $is_valid ) ) {
			if ( $stop_after_first_match ) {
				return $schema;
			}

			$matching_schemas[] = array(
				'schema_object' => $schema,
				'index'         => $index,
			);
		} else {
			$errors[] = array(
				'error_object' => $is_valid,
				'schema'       => $schema,
				'index'        => $index,
			);
		}
	}

	if ( ! $matching_schemas ) {
		return rest_get_combining_operation_error( $value, $param, $errors );
	}

	if ( count( $matching_schemas ) > 1 ) {
		$schema_positions = array();
		$schema_titles    = array();

		foreach ( $matching_schemas as $schema ) {
			$schema_positions[] = $schema['index'];

			if ( isset( $schema['schema_object']['title'] ) ) {
				$schema_titles[] = $schema['schema_object']['title'];
			}
		}

		// If each schema has a title, include those titles in the error message.
		if ( count( $schema_titles ) === count( $matching_schemas ) ) {
			return new WP_Error(
				'rest_one_of_multiple_matches',
				/* translators: 1: Parameter, 2: Schema titles. */
				wp_sprintf( __( '%1$s matches %2$l, but should match only one.' ), $param, $schema_titles ),
				array( 'positions' => $schema_positions )
			);
		}

		return new WP_Error(
			'rest_one_of_multiple_matches',
			/* translators: %s: Parameter. */
			sprintf( __( '%s matches more than one of the expected formats.' ), $param ),
			array( 'positions' => $schema_positions )
		);
	}

	return $matching_schemas[0]['schema_object'];
}
```

## История изменений

- 5.6.0 — Introduced.

## Связанные

Использует: [`rest_get_combining_operation_error`](https://chugunov.pro/api-wordpress/functions/rest_get_combining_operation_error/), [`rest_validate_value_from_schema`](https://chugunov.pro/api-wordpress/functions/rest_validate_value_from_schema/), [`wp_sprintf`](https://chugunov.pro/api-wordpress/functions/wp_sprintf/), [`__`](https://chugunov.pro/api-wordpress/functions/__/), [`is_wp_error`](https://chugunov.pro/api-wordpress/functions/is_wp_error/), `WP_Error::__construct`.
Используется в: [`rest_filter_response_by_context`](https://chugunov.pro/api-wordpress/functions/rest_filter_response_by_context/), [`rest_sanitize_value_from_schema`](https://chugunov.pro/api-wordpress/functions/rest_sanitize_value_from_schema/), [`rest_validate_value_from_schema`](https://chugunov.pro/api-wordpress/functions/rest_validate_value_from_schema/).

Оригинал в официальной документации: https://developer.wordpress.org/reference/functions/rest_find_one_matching_schema/
