WP_REST_Block_Types_Controller::get_item_schema()publicWP 5.5.0

Retrieves the block type' schema, conforming to JSON Schema.

Method of the class: WP_REST_Block_Types_Controller{}

No Hooks.

Return

Array. Item schema data.

Usage

$WP_REST_Block_Types_Controller = new WP_REST_Block_Types_Controller();
$WP_REST_Block_Types_Controller->get_item_schema();

Changelog

Since 5.5.0 Introduced.
Since 6.3.0 Added selectors field.

WP_REST_Block_Types_Controller::get_item_schema() code WP 6.6.2

public function get_item_schema() {
	if ( $this->schema ) {
		return $this->add_additional_fields_schema( $this->schema );
	}

	// rest_validate_value_from_schema doesn't understand $refs, pull out reused definitions for readability.
	$inner_blocks_definition = array(
		'description' => __( 'The list of inner blocks used in the example.' ),
		'type'        => 'array',
		'items'       => array(
			'type'       => 'object',
			'properties' => array(
				'name'        => array(
					'description' => __( 'The name of the inner block.' ),
					'type'        => 'string',
					'pattern'     => self::NAME_PATTERN,
					'required'    => true,
				),
				'attributes'  => array(
					'description' => __( 'The attributes of the inner block.' ),
					'type'        => 'object',
				),
				'innerBlocks' => array(
					'description' => __( "A list of the inner block's own inner blocks. This is a recursive definition following the parent innerBlocks schema." ),
					'type'        => 'array',
				),
			),
		),
	);

	$example_definition = array(
		'description' => __( 'Block example.' ),
		'type'        => array( 'object', 'null' ),
		'default'     => null,
		'properties'  => array(
			'attributes'  => array(
				'description' => __( 'The attributes used in the example.' ),
				'type'        => 'object',
			),
			'innerBlocks' => $inner_blocks_definition,
		),
		'context'     => array( 'embed', 'view', 'edit' ),
		'readonly'    => true,
	);

	$keywords_definition = array(
		'description' => __( 'Block keywords.' ),
		'type'        => 'array',
		'items'       => array(
			'type' => 'string',
		),
		'default'     => array(),
		'context'     => array( 'embed', 'view', 'edit' ),
		'readonly'    => true,
	);

	$icon_definition = array(
		'description' => __( 'Icon of block type.' ),
		'type'        => array( 'string', 'null' ),
		'default'     => null,
		'context'     => array( 'embed', 'view', 'edit' ),
		'readonly'    => true,
	);

	$category_definition = array(
		'description' => __( 'Block category.' ),
		'type'        => array( 'string', 'null' ),
		'default'     => null,
		'context'     => array( 'embed', 'view', 'edit' ),
		'readonly'    => true,
	);

	$this->schema = array(
		'$schema'    => 'http://json-schema.org/draft-04/schema#',
		'title'      => 'block-type',
		'type'       => 'object',
		'properties' => array(
			'api_version'            => array(
				'description' => __( 'Version of block API.' ),
				'type'        => 'integer',
				'default'     => 1,
				'context'     => array( 'embed', 'view', 'edit' ),
				'readonly'    => true,
			),
			'title'                  => array(
				'description' => __( 'Title of block type.' ),
				'type'        => 'string',
				'default'     => '',
				'context'     => array( 'embed', 'view', 'edit' ),
				'readonly'    => true,
			),
			'name'                   => array(
				'description' => __( 'Unique name identifying the block type.' ),
				'type'        => 'string',
				'pattern'     => self::NAME_PATTERN,
				'required'    => true,
				'context'     => array( 'embed', 'view', 'edit' ),
				'readonly'    => true,
			),
			'description'            => array(
				'description' => __( 'Description of block type.' ),
				'type'        => 'string',
				'default'     => '',
				'context'     => array( 'embed', 'view', 'edit' ),
				'readonly'    => true,
			),
			'icon'                   => $icon_definition,
			'attributes'             => array(
				'description'          => __( 'Block attributes.' ),
				'type'                 => array( 'object', 'null' ),
				'properties'           => array(),
				'default'              => null,
				'additionalProperties' => array(
					'type' => 'object',
				),
				'context'              => array( 'embed', 'view', 'edit' ),
				'readonly'             => true,
			),
			'provides_context'       => array(
				'description'          => __( 'Context provided by blocks of this type.' ),
				'type'                 => 'object',
				'properties'           => array(),
				'additionalProperties' => array(
					'type' => 'string',
				),
				'default'              => array(),
				'context'              => array( 'embed', 'view', 'edit' ),
				'readonly'             => true,
			),
			'uses_context'           => array(
				'description' => __( 'Context values inherited by blocks of this type.' ),
				'type'        => 'array',
				'default'     => array(),
				'items'       => array(
					'type' => 'string',
				),
				'context'     => array( 'embed', 'view', 'edit' ),
				'readonly'    => true,
			),
			'selectors'              => array(
				'description' => __( 'Custom CSS selectors.' ),
				'type'        => 'object',
				'default'     => array(),
				'properties'  => array(),
				'context'     => array( 'embed', 'view', 'edit' ),
				'readonly'    => true,
			),
			'supports'               => array(
				'description' => __( 'Block supports.' ),
				'type'        => 'object',
				'default'     => array(),
				'properties'  => array(),
				'context'     => array( 'embed', 'view', 'edit' ),
				'readonly'    => true,
			),
			'category'               => $category_definition,
			'is_dynamic'             => array(
				'description' => __( 'Is the block dynamically rendered.' ),
				'type'        => 'boolean',
				'default'     => false,
				'context'     => array( 'embed', 'view', 'edit' ),
				'readonly'    => true,
			),
			'editor_script_handles'  => array(
				'description' => __( 'Editor script handles.' ),
				'type'        => array( 'array' ),
				'default'     => array(),
				'items'       => array(
					'type' => 'string',
				),
				'context'     => array( 'embed', 'view', 'edit' ),
				'readonly'    => true,
			),
			'script_handles'         => array(
				'description' => __( 'Public facing and editor script handles.' ),
				'type'        => array( 'array' ),
				'default'     => array(),
				'items'       => array(
					'type' => 'string',
				),
				'context'     => array( 'embed', 'view', 'edit' ),
				'readonly'    => true,
			),
			'view_script_handles'    => array(
				'description' => __( 'Public facing script handles.' ),
				'type'        => array( 'array' ),
				'default'     => array(),
				'items'       => array(
					'type' => 'string',
				),
				'context'     => array( 'embed', 'view', 'edit' ),
				'readonly'    => true,
			),
			'view_script_module_ids' => array(
				'description' => __( 'Public facing script module IDs.' ),
				'type'        => array( 'array' ),
				'default'     => array(),
				'items'       => array(
					'type' => 'string',
				),
				'context'     => array( 'embed', 'view', 'edit' ),
				'readonly'    => true,
			),
			'editor_style_handles'   => array(
				'description' => __( 'Editor style handles.' ),
				'type'        => array( 'array' ),
				'default'     => array(),
				'items'       => array(
					'type' => 'string',
				),
				'context'     => array( 'embed', 'view', 'edit' ),
				'readonly'    => true,
			),
			'style_handles'          => array(
				'description' => __( 'Public facing and editor style handles.' ),
				'type'        => array( 'array' ),
				'default'     => array(),
				'items'       => array(
					'type' => 'string',
				),
				'context'     => array( 'embed', 'view', 'edit' ),
				'readonly'    => true,
			),
			'view_style_handles'     => array(
				'description' => __( 'Public facing style handles.' ),
				'type'        => array( 'array' ),
				'default'     => array(),
				'items'       => array(
					'type' => 'string',
				),
				'context'     => array( 'embed', 'view', 'edit' ),
				'readonly'    => true,
			),
			'styles'                 => array(
				'description' => __( 'Block style variations.' ),
				'type'        => 'array',
				'items'       => array(
					'type'       => 'object',
					'properties' => array(
						'name'         => array(
							'description' => __( 'Unique name identifying the style.' ),
							'type'        => 'string',
							'required'    => true,
						),
						'label'        => array(
							'description' => __( 'The human-readable label for the style.' ),
							'type'        => 'string',
						),
						'inline_style' => array(
							'description' => __( 'Inline CSS code that registers the CSS class required for the style.' ),
							'type'        => 'string',
						),
						'style_handle' => array(
							'description' => __( 'Contains the handle that defines the block style.' ),
							'type'        => 'string',
						),
					),
				),
				'default'     => array(),
				'context'     => array( 'embed', 'view', 'edit' ),
				'readonly'    => true,
			),
			'variations'             => array(
				'description' => __( 'Block variations.' ),
				'type'        => 'array',
				'items'       => array(
					'type'       => 'object',
					'properties' => array(
						'name'        => array(
							'description' => __( 'The unique and machine-readable name.' ),
							'type'        => 'string',
							'required'    => true,
						),
						'title'       => array(
							'description' => __( 'A human-readable variation title.' ),
							'type'        => 'string',
							'required'    => true,
						),
						'description' => array(
							'description' => __( 'A detailed variation description.' ),
							'type'        => 'string',
							'required'    => false,
						),
						'category'    => $category_definition,
						'icon'        => $icon_definition,
						'isDefault'   => array(
							'description' => __( 'Indicates whether the current variation is the default one.' ),
							'type'        => 'boolean',
							'required'    => false,
							'default'     => false,
						),
						'attributes'  => array(
							'description' => __( 'The initial values for attributes.' ),
							'type'        => 'object',
						),
						'innerBlocks' => $inner_blocks_definition,
						'example'     => $example_definition,
						'scope'       => array(
							'description' => __( 'The list of scopes where the variation is applicable. When not provided, it assumes all available scopes.' ),
							'type'        => array( 'array', 'null' ),
							'default'     => null,
							'items'       => array(
								'type' => 'string',
								'enum' => array( 'block', 'inserter', 'transform' ),
							),
							'readonly'    => true,
						),
						'keywords'    => $keywords_definition,
					),
				),
				'readonly'    => true,
				'context'     => array( 'embed', 'view', 'edit' ),
				'default'     => null,
			),
			'textdomain'             => array(
				'description' => __( 'Public text domain.' ),
				'type'        => array( 'string', 'null' ),
				'default'     => null,
				'context'     => array( 'embed', 'view', 'edit' ),
				'readonly'    => true,
			),
			'parent'                 => array(
				'description' => __( 'Parent blocks.' ),
				'type'        => array( 'array', 'null' ),
				'items'       => array(
					'type'    => 'string',
					'pattern' => self::NAME_PATTERN,
				),
				'default'     => null,
				'context'     => array( 'embed', 'view', 'edit' ),
				'readonly'    => true,
			),
			'ancestor'               => array(
				'description' => __( 'Ancestor blocks.' ),
				'type'        => array( 'array', 'null' ),
				'items'       => array(
					'type'    => 'string',
					'pattern' => self::NAME_PATTERN,
				),
				'default'     => null,
				'context'     => array( 'embed', 'view', 'edit' ),
				'readonly'    => true,
			),
			'allowed_blocks'         => array(
				'description' => __( 'Allowed child block types.' ),
				'type'        => array( 'array', 'null' ),
				'items'       => array(
					'type'    => 'string',
					'pattern' => self::NAME_PATTERN,
				),
				'default'     => null,
				'context'     => array( 'embed', 'view', 'edit' ),
				'readonly'    => true,
			),
			'keywords'               => $keywords_definition,
			'example'                => $example_definition,
			'block_hooks'            => array(
				'description'       => __( 'This block is automatically inserted near any occurrence of the block types used as keys of this map, into a relative position given by the corresponding value.' ),
				'type'              => 'object',
				'patternProperties' => array(
					self::NAME_PATTERN => array(
						'type' => 'string',
						'enum' => array( 'before', 'after', 'first_child', 'last_child' ),
					),
				),
				'default'           => array(),
				'context'           => array( 'embed', 'view', 'edit' ),
				'readonly'          => true,
			),
		),
	);

	// Properties deprecated in WordPress 6.1, but left in the schema for backwards compatibility.
	$deprecated_properties      = array(
		'editor_script' => array(
			'description' => __( 'Editor script handle. DEPRECATED: Use `editor_script_handles` instead.' ),
			'type'        => array( 'string', 'null' ),
			'default'     => null,
			'context'     => array( 'embed', 'view', 'edit' ),
			'readonly'    => true,
		),
		'script'        => array(
			'description' => __( 'Public facing and editor script handle. DEPRECATED: Use `script_handles` instead.' ),
			'type'        => array( 'string', 'null' ),
			'default'     => null,
			'context'     => array( 'embed', 'view', 'edit' ),
			'readonly'    => true,
		),
		'view_script'   => array(
			'description' => __( 'Public facing script handle. DEPRECATED: Use `view_script_handles` instead.' ),
			'type'        => array( 'string', 'null' ),
			'default'     => null,
			'context'     => array( 'embed', 'view', 'edit' ),
			'readonly'    => true,
		),
		'editor_style'  => array(
			'description' => __( 'Editor style handle. DEPRECATED: Use `editor_style_handles` instead.' ),
			'type'        => array( 'string', 'null' ),
			'default'     => null,
			'context'     => array( 'embed', 'view', 'edit' ),
			'readonly'    => true,
		),
		'style'         => array(
			'description' => __( 'Public facing and editor style handle. DEPRECATED: Use `style_handles` instead.' ),
			'type'        => array( 'string', 'null' ),
			'default'     => null,
			'context'     => array( 'embed', 'view', 'edit' ),
			'readonly'    => true,
		),
	);
	$this->schema['properties'] = array_merge( $this->schema['properties'], $deprecated_properties );

	return $this->add_additional_fields_schema( $this->schema );
}