WordPress Version: 5.6
/**
* Handles getting the best type for a multi-type schema.
*
* This is a wrapper for {@see rest_get_best_type_for_value()} that handles
* backward compatibility for schemas that use invalid types.
*
* @since 5.5.0
*
* @param mixed $value The value to check.
* @param array $args The schema array to use.
* @param string $param The parameter name, used in error messages.
* @return string
*/
function rest_handle_multi_type_schema($value, $args, $param = '')
{
$allowed_types = array('array', 'object', 'string', 'number', 'integer', 'boolean', 'null');
$invalid_types = array_diff($args['type'], $allowed_types);
if ($invalid_types) {
_doing_it_wrong(
__FUNCTION__,
/* translators: 1: Parameter, 2: List of allowed types. */
wp_sprintf(__('The "type" schema keyword for %1$s can only contain the built-in types: %2$l.'), $param, $allowed_types),
'5.5.0'
);
}
$best_type = rest_get_best_type_for_value($value, $args['type']);
if (!$best_type) {
if (!$invalid_types) {
return '';
}
// Backward compatibility for previous behavior which allowed the value if there was an invalid type used.
$best_type = reset($invalid_types);
}
return $best_type;
}