WP_REST_Themes_Controller::get_item_schema(): array

In this article

Retrieves the theme’s schema, conforming to JSON Schema.

Return

array Item schema data.

Source

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

	$schema = array(
		'$schema'    => 'http://json-schema.org/draft-04/schema#',
		'title'      => 'theme',
		'type'       => 'object',
		'properties' => array(
			'stylesheet'     => array(
				'description' => __( 'The theme\'s stylesheet. This uniquely identifies the theme.' ),
				'type'        => 'string',
				'readonly'    => true,
			),
			'template'       => array(
				'description' => __( 'The theme\'s template. If this is a child theme, this refers to the parent theme, otherwise this is the same as the theme\'s stylesheet.' ),
				'type'        => 'string',
				'readonly'    => true,
			),
			'author'         => array(
				'description' => __( 'The theme author.' ),
				'type'        => 'object',
				'readonly'    => true,
				'properties'  => array(
					'raw'      => array(
						'description' => __( 'The theme author\'s name, as found in the theme header.' ),
						'type'        => 'string',
					),
					'rendered' => array(
						'description' => __( 'HTML for the theme author, transformed for display.' ),
						'type'        => 'string',
					),
				),
			),
			'author_uri'     => array(
				'description' => __( 'The website of the theme author.' ),
				'type'        => 'object',
				'readonly'    => true,
				'properties'  => array(
					'raw'      => array(
						'description' => __( 'The website of the theme author, as found in the theme header.' ),
						'type'        => 'string',
						'format'      => 'uri',
					),
					'rendered' => array(
						'description' => __( 'The website of the theme author, transformed for display.' ),
						'type'        => 'string',
						'format'      => 'uri',
					),
				),
			),
			'description'    => array(
				'description' => __( 'A description of the theme.' ),
				'type'        => 'object',
				'readonly'    => true,
				'properties'  => array(
					'raw'      => array(
						'description' => __( 'The theme description, as found in the theme header.' ),
						'type'        => 'string',
					),
					'rendered' => array(
						'description' => __( 'The theme description, transformed for display.' ),
						'type'        => 'string',
					),
				),
			),
			'is_block_theme' => array(
				'description' => __( 'Whether the theme is a block-based theme.' ),
				'type'        => 'boolean',
				'readonly'    => true,
			),
			'name'           => array(
				'description' => __( 'The name of the theme.' ),
				'type'        => 'object',
				'readonly'    => true,
				'properties'  => array(
					'raw'      => array(
						'description' => __( 'The theme name, as found in the theme header.' ),
						'type'        => 'string',
					),
					'rendered' => array(
						'description' => __( 'The theme name, transformed for display.' ),
						'type'        => 'string',
					),
				),
			),
			'requires_php'   => array(
				'description' => __( 'The minimum PHP version required for the theme to work.' ),
				'type'        => 'string',
				'readonly'    => true,
			),
			'requires_wp'    => array(
				'description' => __( 'The minimum WordPress version required for the theme to work.' ),
				'type'        => 'string',
				'readonly'    => true,
			),
			'screenshot'     => array(
				'description' => __( 'The theme\'s screenshot URL.' ),
				'type'        => 'string',
				'format'      => 'uri',
				'readonly'    => true,
			),
			'tags'           => array(
				'description' => __( 'Tags indicating styles and features of the theme.' ),
				'type'        => 'object',
				'readonly'    => true,
				'properties'  => array(
					'raw'      => array(
						'description' => __( 'The theme tags, as found in the theme header.' ),
						'type'        => 'array',
						'items'       => array(
							'type' => 'string',
						),
					),
					'rendered' => array(
						'description' => __( 'The theme tags, transformed for display.' ),
						'type'        => 'string',
					),
				),
			),
			'textdomain'     => array(
				'description' => __( 'The theme\'s text domain.' ),
				'type'        => 'string',
				'readonly'    => true,
			),
			'theme_supports' => array(
				'description' => __( 'Features supported by this theme.' ),
				'type'        => 'object',
				'readonly'    => true,
				'properties'  => array(),
			),
			'theme_uri'      => array(
				'description' => __( 'The URI of the theme\'s webpage.' ),
				'type'        => 'object',
				'readonly'    => true,
				'properties'  => array(
					'raw'      => array(
						'description' => __( 'The URI of the theme\'s webpage, as found in the theme header.' ),
						'type'        => 'string',
						'format'      => 'uri',
					),
					'rendered' => array(
						'description' => __( 'The URI of the theme\'s webpage, transformed for display.' ),
						'type'        => 'string',
						'format'      => 'uri',
					),
				),
			),
			'version'        => array(
				'description' => __( 'The theme\'s current version.' ),
				'type'        => 'string',
				'readonly'    => true,
			),
			'status'         => array(
				'description' => __( 'A named status for the theme.' ),
				'type'        => 'string',
				'enum'        => array( 'inactive', 'active' ),
			),
		),
	);

	foreach ( get_registered_theme_features() as $feature => $config ) {
		if ( ! is_array( $config['show_in_rest'] ) ) {
			continue;
		}

		$name = $config['show_in_rest']['name'];

		$schema['properties']['theme_supports']['properties'][ $name ] = $config['show_in_rest']['schema'];
	}

	$this->schema = $schema;

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

Changelog

VersionDescription
5.0.0Introduced.

User Contributed Notes

You must log in before being able to contribute a note or feedback.