Automattic\WooCommerce\Internal\Abilities\REST
RestAbilityFactory::sanitize_args_to_schema
Sanitize WordPress REST args to valid JSON Schema format.
Converts WordPress REST API argument arrays to JSON Schema by:
- Removing PHP callbacks (sanitize_callback, validate_callback)
- Converting
'required'from boolean-per-field to array-of-names - Removing WordPress-specific non-schema fields
- Preserving valid JSON Schema properties
- Converting invalid types (date-time, mixed, action) to valid JSON Schema
- Recursively sanitizing nested properties and items
- Deduplicating enum values
Method of the class: RestAbilityFactory{}
No Hooks.
Returns
Array. Valid JSON Schema object.
Usage
$result = RestAbilityFactory::sanitize_args_to_schema( $args ): array;
- $args(array) (required)
- WordPress REST API arguments array.
RestAbilityFactory::sanitize_args_to_schema() RestAbilityFactory::sanitize args to schema code WC 10.7.0
private static function sanitize_args_to_schema( array $args ): array {
$properties = array();
$required = array();
foreach ( $args as $key => $arg ) {
$property = array();
// Copy valid JSON Schema fields, normalizing types.
if ( isset( $arg['type'] ) ) {
$property = self::normalize_type( $property, $arg['type'] );
}
if ( isset( $arg['description'] ) ) {
$property['description'] = $arg['description'];
}
if ( isset( $arg['default'] ) ) {
$property['default'] = $arg['default'];
}
if ( isset( $arg['enum'] ) ) {
$property['enum'] = self::dedupe_enum( $arg['enum'] );
}
if ( isset( $arg['items'] ) ) {
$property['items'] = self::sanitize_schema( $arg['items'] );
}
if ( isset( $arg['minimum'] ) ) {
$property['minimum'] = $arg['minimum'];
}
if ( isset( $arg['maximum'] ) ) {
$property['maximum'] = $arg['maximum'];
}
if ( isset( $arg['format'] ) && ! isset( $property['format'] ) ) {
$property['format'] = $arg['format'];
}
if ( isset( $arg['properties'] ) ) {
$property['properties'] = self::sanitize_schema_properties( $arg['properties'] );
}
// Convert readonly to readOnly (JSON Schema format).
if ( isset( $arg['readonly'] ) && $arg['readonly'] ) {
$property['readOnly'] = true;
}
// Collect required fields.
if ( isset( $arg['required'] ) && true === $arg['required'] ) {
$required[] = $key;
}
$properties[ $key ] = $property;
}
$schema = array(
'type' => 'object',
'properties' => $properties,
);
if ( ! empty( $required ) ) {
$schema['required'] = array_unique( $required );
}
return $schema;
}