rest_validate_enum( mixed $value, array $args, string $param ): true|WP_Error

Validates that the given value is a member of the JSON Schema “enum”.

Parameters

$valuemixedrequired
The value to validate.
$argsarrayrequired
The schema array to use.
$paramstringrequired
The parameter name, used in error messages.

Return

true|WP_Error True if the "enum" contains the value or a WP_Error instance otherwise.

Source

function rest_validate_enum( $value, $args, $param ) {
	$sanitized_value = rest_sanitize_value_from_schema( $value, $args, $param );
	if ( is_wp_error( $sanitized_value ) ) {
		return $sanitized_value;
	}

	foreach ( $args['enum'] as $enum_value ) {
		if ( rest_are_values_equal( $sanitized_value, $enum_value ) ) {
			return true;
		}
	}

	$encoded_enum_values = array();
	foreach ( $args['enum'] as $enum_value ) {
		$encoded_enum_values[] = is_scalar( $enum_value ) ? $enum_value : wp_json_encode( $enum_value );
	}

	if ( count( $encoded_enum_values ) === 1 ) {
		/* translators: 1: Parameter, 2: Valid values. */
		return new WP_Error( 'rest_not_in_enum', wp_sprintf( __( '%1$s is not %2$s.' ), $param, $encoded_enum_values[0] ) );
	}

	/* translators: 1: Parameter, 2: List of valid values. */
	return new WP_Error( 'rest_not_in_enum', wp_sprintf( __( '%1$s is not one of %2$l.' ), $param, $encoded_enum_values ) );
}

Changelog

VersionDescription
5.7.0Introduced.

User Contributed Notes

  1. Skip to note 2 content

    NOTE: Do not provide enums if the property accepts array values. The example below will fail.

    array(
    	'description' => 'Testing',
    	'context'     => array( 'view', 'edit' ),
    	'enum'        => array( 'first', 'second', 'third' ),
    	'type'        => 'array',
    	'items'       => array(
    		'type' => 'string',
    	),
    	'default'     => array( 'first', 'second' ),
    	'required'    => false,
    )

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