WP_REST_Post_Types_Controller::get_item_schema()publicWP 4.7.0

Retrieves the post type's schema, conforming to JSON Schema.

Method of the class: WP_REST_Post_Types_Controller{}

No Hooks.

Return

Array. Item schema data.

Usage

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

Changelog

Since 4.7.0 Introduced.
Since 4.8.0 The supports property was added.
Since 5.9.0 The visibility and rest_namespace properties were added.
Since 6.1.0 The icon property was added.

WP_REST_Post_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 );
	}

	$schema = array(
		'$schema'    => 'http://json-schema.org/draft-04/schema#',
		'title'      => 'type',
		'type'       => 'object',
		'properties' => array(
			'capabilities'   => array(
				'description' => __( 'All capabilities used by the post type.' ),
				'type'        => 'object',
				'context'     => array( 'edit' ),
				'readonly'    => true,
			),
			'description'    => array(
				'description' => __( 'A human-readable description of the post type.' ),
				'type'        => 'string',
				'context'     => array( 'view', 'edit' ),
				'readonly'    => true,
			),
			'hierarchical'   => array(
				'description' => __( 'Whether or not the post type should have children.' ),
				'type'        => 'boolean',
				'context'     => array( 'view', 'edit' ),
				'readonly'    => true,
			),
			'viewable'       => array(
				'description' => __( 'Whether or not the post type can be viewed.' ),
				'type'        => 'boolean',
				'context'     => array( 'edit' ),
				'readonly'    => true,
			),
			'labels'         => array(
				'description' => __( 'Human-readable labels for the post type for various contexts.' ),
				'type'        => 'object',
				'context'     => array( 'edit' ),
				'readonly'    => true,
			),
			'name'           => array(
				'description' => __( 'The title for the post type.' ),
				'type'        => 'string',
				'context'     => array( 'view', 'edit', 'embed' ),
				'readonly'    => true,
			),
			'slug'           => array(
				'description' => __( 'An alphanumeric identifier for the post type.' ),
				'type'        => 'string',
				'context'     => array( 'view', 'edit', 'embed' ),
				'readonly'    => true,
			),
			'supports'       => array(
				'description' => __( 'All features, supported by the post type.' ),
				'type'        => 'object',
				'context'     => array( 'edit' ),
				'readonly'    => true,
			),
			'has_archive'    => array(
				'description' => __( 'If the value is a string, the value will be used as the archive slug. If the value is false the post type has no archive.' ),
				'type'        => array( 'string', 'boolean' ),
				'context'     => array( 'view', 'edit' ),
				'readonly'    => true,
			),
			'taxonomies'     => array(
				'description' => __( 'Taxonomies associated with post type.' ),
				'type'        => 'array',
				'items'       => array(
					'type' => 'string',
				),
				'context'     => array( 'view', 'edit' ),
				'readonly'    => true,
			),
			'rest_base'      => array(
				'description' => __( 'REST base route for the post type.' ),
				'type'        => 'string',
				'context'     => array( 'view', 'edit', 'embed' ),
				'readonly'    => true,
			),
			'rest_namespace' => array(
				'description' => __( 'REST route\'s namespace for the post type.' ),
				'type'        => 'string',
				'context'     => array( 'view', 'edit', 'embed' ),
				'readonly'    => true,
			),
			'visibility'     => array(
				'description' => __( 'The visibility settings for the post type.' ),
				'type'        => 'object',
				'context'     => array( 'edit' ),
				'readonly'    => true,
				'properties'  => array(
					'show_ui'           => array(
						'description' => __( 'Whether to generate a default UI for managing this post type.' ),
						'type'        => 'boolean',
					),
					'show_in_nav_menus' => array(
						'description' => __( 'Whether to make the post type available for selection in navigation menus.' ),
						'type'        => 'boolean',
					),
				),
			),
			'icon'           => array(
				'description' => __( 'The icon for the post type.' ),
				'type'        => array( 'string', 'null' ),
				'context'     => array( 'view', 'edit', 'embed' ),
				'readonly'    => true,
			),
			'template'       => array(
				'type'        => array( 'array' ),
				'description' => __( 'The block template associated with the post type.' ),
				'readonly'    => true,
				'context'     => array( 'view', 'edit', 'embed' ),
			),
			'template_lock'  => array(
				'type'        => array( 'string', 'boolean' ),
				'enum'        => array( 'all', 'insert', 'contentOnly', false ),
				'description' => __( 'The template_lock associated with the post type, or false if none.' ),
				'readonly'    => true,
				'context'     => array( 'view', 'edit', 'embed' ),
			),
		),
	);

	$this->schema = $schema;

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