Automattic\WooCommerce\Api\Utils

SchemaHandle::get_all_metadatapublicWC 1.0

Return every metadata row in the schema (introspection types excluded).

Each row describes one target (a type, a field, an argument, or an enum value) and carries the name=>value entries declared on it. The same row shape is used for every target kind; the three nullable position fields (field, argument, enumValue) discriminate.

Method of the class: SchemaHandle{}

No Hooks.

Returns

list. string, field: ?string, argument: ?string, enumValue: ?string, entries: array<string, bool|int|float|string|null>, authorization: list<array{attribute: string, args: list<mixed>}>}>

Usage

$SchemaHandle = new SchemaHandle();
$SchemaHandle->get_all_metadata(): array;

SchemaHandle::get_all_metadata() code WC 10.9.1

public function get_all_metadata(): array {
	$rows   = array();
	$schema = $this->engine_schema;

	foreach ( $schema->getTypeMap() as $type_name => $type ) {
		if ( self::is_introspection_name( $type_name ) ) {
			continue;
		}

		$type_metadata      = self::read_type_metadata( $type );
		$type_authorization = self::read_type_authorization( $type );
		if ( ! empty( $type_metadata ) || ! empty( $type_authorization ) ) {
			$rows[] = self::make_row( $type_name, null, null, null, $type_metadata, $type_authorization );
		}

		if ( $type instanceof HasFieldsType ) {
			foreach ( $type->getFields() as $field_name => $field ) {
				$field_metadata      = self::read_element_metadata( $field );
				$field_authorization = self::read_element_authorization( $field );
				if ( ! empty( $field_metadata ) || ! empty( $field_authorization ) ) {
					$rows[] = self::make_row( $type_name, $field_name, null, null, $field_metadata, $field_authorization );
				}

				foreach ( $field->args as $arg ) {
					$arg_metadata = self::read_element_metadata( $arg );
					if ( ! empty( $arg_metadata ) ) {
						$rows[] = self::make_row( $type_name, $field_name, $arg->name, null, $arg_metadata, array() );
					}
				}
			}
			continue;
		}

		if ( $type instanceof InputObjectType ) {
			foreach ( $type->getFields() as $field_name => $field ) {
				$field_metadata      = self::read_element_metadata( $field );
				$field_authorization = self::read_element_authorization( $field );
				if ( ! empty( $field_metadata ) || ! empty( $field_authorization ) ) {
					$rows[] = self::make_row( $type_name, $field_name, null, null, $field_metadata, $field_authorization );
				}
			}
			continue;
		}

		if ( $type instanceof EnumType ) {
			foreach ( $type->getValues() as $value ) {
				$value_metadata = self::read_element_metadata( $value );
				if ( ! empty( $value_metadata ) ) {
					$rows[] = self::make_row( $type_name, null, null, $value->name, $value_metadata, array() );
				}
			}
		}
	}

	return $rows;
}