函数文档

rest_default_additional_properties_to_false()

💡 云策文档标注

概述

rest_default_additional_properties_to_false() 是一个 WordPress REST API 函数,用于递归修改 JSON Schema 对象定义,默认将 "additionalProperties" 设置为 false,以限制对象中未定义属性的添加。

关键要点

  • 函数递归处理 schema 中的对象和数组类型,确保所有嵌套对象都应用此默认设置。
  • 仅当对象定义中未显式设置 "additionalProperties" 时,才将其设置为 false。
  • 支持 "patternProperties" 关键字(自 WordPress 5.6.0 起),并递归处理其子 schema。
  • 函数接受一个数组参数 $schema,并返回修改后的 schema 数组。

代码示例

function rest_default_additional_properties_to_false( $schema ) {
	$type = (array) $schema['type'];

	if ( in_array( 'object', $type, true ) ) {
		if ( isset( $schema['properties'] ) ) {
			foreach ( $schema['properties'] as $key => $child_schema ) {
				$schema['properties'][ $key ] = rest_default_additional_properties_to_false( $child_schema );
			}
		}

		if ( isset( $schema['patternProperties'] ) ) {
			foreach ( $schema['patternProperties'] as $key => $child_schema ) {
				$schema['patternProperties'][ $key ] = rest_default_additional_properties_to_false( $child_schema );
			}
		}

		if ( ! isset( $schema['additionalProperties'] ) ) {
			$schema['additionalProperties'] = false;
		}
	}

	if ( in_array( 'array', $type, true ) ) {
		if ( isset( $schema['items'] ) ) {
			$schema['items'] = rest_default_additional_properties_to_false( $schema['items'] );
		}
	}

	return $schema;
}

注意事项

  • 此函数主要用于 WordPress REST API 内部,如 WP_REST_Meta_Fields 和 WP_REST_Settings_Controller 类中,以确保 schema 的严格性。
  • 开发者在使用自定义 REST API 端点时,可调用此函数来增强 schema 验证,防止意外属性被接受。
  • 注意递归处理可能影响性能,特别是在深层嵌套的 schema 中。

📄 原文内容

Sets the “additionalProperties” to false by default for all object definitions in the schema.

Parameters

$schemaarrayrequired
The schema to modify.

Return

array The modified schema.

Source

function rest_default_additional_properties_to_false( $schema ) {
	$type = (array) $schema['type'];

	if ( in_array( 'object', $type, true ) ) {
		if ( isset( $schema['properties'] ) ) {
			foreach ( $schema['properties'] as $key => $child_schema ) {
				$schema['properties'][ $key ] = rest_default_additional_properties_to_false( $child_schema );
			}
		}

		if ( isset( $schema['patternProperties'] ) ) {
			foreach ( $schema['patternProperties'] as $key => $child_schema ) {
				$schema['patternProperties'][ $key ] = rest_default_additional_properties_to_false( $child_schema );
			}
		}

		if ( ! isset( $schema['additionalProperties'] ) ) {
			$schema['additionalProperties'] = false;
		}
	}

	if ( in_array( 'array', $type, true ) ) {
		if ( isset( $schema['items'] ) ) {
			$schema['items'] = rest_default_additional_properties_to_false( $schema['items'] );
		}
	}

	return $schema;
}

Changelog

Version Description
5.6.0 Support the “patternProperties” keyword.
5.5.0 Introduced.