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

In this article

Finds the matching schema among the “oneOf” schemas.

Parameters

$valuemixedrequired
The value to validate.
$argsarrayrequired
The schema array to use.
$paramstringrequired
The parameter name, used in error messages.
$stop_after_first_matchbooloptional
Whether the process should stop after the first successful match.

Default:false

Return

array|WP_Error The matching schema or WP_Error instance if the number of matching schemas is not equal to one.

Source

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

Changelog

VersionDescription
5.6.0Introduced.

User Contributed Notes

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