rest_get_endpoint_args_for_schema

The timeline below displays how wordpress function rest_get_endpoint_args_for_schema has changed across different WordPress versions. If a version is not listed, refer to the next available version below.

WordPress Version: 5.6

/**
 * Retrieves an array of endpoint arguments from the item schema and endpoint method.
 *
 * @since 5.6.0
 *
 * @param array  $schema The full JSON schema for the endpoint.
 * @param string $method Optional. HTTP method of the endpoint. The arguments for `CREATABLE` endpoints are
 *                       checked for required values and may fall-back to a given default, this is not done
 *                       on `EDITABLE` endpoints. Default WP_REST_Server::CREATABLE.
 * @return array The endpoint arguments.
 */
function rest_get_endpoint_args_for_schema($schema, $method = WP_REST_Server::CREATABLE)
{
    $schema_properties = (!empty($schema['properties'])) ? $schema['properties'] : array();
    $endpoint_args = array();
    $valid_schema_properties = rest_get_allowed_schema_keywords();
    $valid_schema_properties = array_diff($valid_schema_properties, array('default', 'required'));
    foreach ($schema_properties as $field_id => $params) {
        // Arguments specified as `readonly` are not allowed to be set.
        if (!empty($params['readonly'])) {
            continue;
        }
        $endpoint_args[$field_id] = array('validate_callback' => 'rest_validate_request_arg', 'sanitize_callback' => 'rest_sanitize_request_arg');
        if (WP_REST_Server::CREATABLE === $method && isset($params['default'])) {
            $endpoint_args[$field_id]['default'] = $params['default'];
        }
        if (WP_REST_Server::CREATABLE === $method && !empty($params['required'])) {
            $endpoint_args[$field_id]['required'] = true;
        }
        foreach ($valid_schema_properties as $schema_prop) {
            if (isset($params[$schema_prop])) {
                $endpoint_args[$field_id][$schema_prop] = $params[$schema_prop];
            }
        }
        // Merge in any options provided by the schema property.
        if (isset($params['arg_options'])) {
            // Only use required / default from arg_options on CREATABLE endpoints.
            if (WP_REST_Server::CREATABLE !== $method) {
                $params['arg_options'] = array_diff_key($params['arg_options'], array('required' => '', 'default' => ''));
            }
            $endpoint_args[$field_id] = array_merge($endpoint_args[$field_id], $params['arg_options']);
        }
    }
    return $endpoint_args;
}