API_Action::get_parameter_fields()

Returns all fields for request parameters.

Description

This method can be used by the get_element_map_fields() and get_meta_map_fields() methods to get the full list and then filter the parameter fields that should be mappable.

See also

Return

(array) Associative array of <code>$field_slug => $field_args</code> pairs.

Source

File: src/modules/actions/api-action.php

	protected function get_parameter_fields() {
		$structure = $this->api_structure();
		$route     = $this->api_route();
		$method    = $this->api_request_method;

		$mode = $this->api()->get_mode();

		$params = array_merge( $structure->get_base_uri_params( $mode ), $route->get_method_params( $method ) );

		$fields = array();
		foreach ( $params as $param => $param_info ) {
			if ( ! empty( $param_info['internal'] ) ) {
				continue;
			}

			$field = array(
				'label'       => $param,
				'description' => $param_info['description'],
				'default'     => $param_info['default'],
				'required'    => $param_info['required'],
			);

			switch ( $param_info['type'] ) {
				case 'boolean':
					$field['type'] = 'checkbox';
					break;
				case 'float':
				case 'number':
					$field['type'] = 'number';
					$field['step'] = 0.001;
					break;
				case 'integer':
					$field['type'] = 'number';
					$field['step'] = 1;
					break;
				case 'array':
					if ( ! empty( $param_info['enum'] ) ) {
						$field['type']    = 'multiselect';
						$field['choices'] = array_combine( $param_info['enum'], $param_info['enum'] );
					} elseif ( ! empty( $param_info['items']['enum'] ) ) {
						$field['type']    = 'multiselect';
						$field['choices'] = array_combine( $param_info['items']['enum'], $param_info['items']['enum'] );
					} elseif ( ! empty( $param_info['items']['type'] ) ) {
						$field['repeatable'] = true;
						switch ( $param_info['items']['type'] ) {
							case 'boolean':
								$field['type'] = 'checkbox';
								break;
							case 'float':
							case 'number':
								$field['type'] = 'number';
								$field['step'] = 0.001;
								break;
							case 'integer':
								$field['type'] = 'number';
								$field['step'] = 1;
								break;
							case 'string':
							default:
								$field['type'] = 'text';
						}
					} else {
						$field['type']       = 'text';
						$field['repeatable'] = true;
					}
					break;
				case 'string':
				default:
					if ( ! empty( $param_info['enum'] ) ) {
						$field['type']    = 'select';
						$field['choices'] = array_combine( $param_info['enum'], $param_info['enum'] );
					} else {
						$field['type'] = 'text';
					}
			}

			$fields[ $param ] = $field;
		}

		return $fields;
	}

Changelog

Changelog
Version Description
1.0.0 Introduced.