WP_REST_Menu_Items_Controller::get_item_schema()publicWP 5.9.0

Retrieves the term's schema, conforming to JSON Schema.

Метод класса: WP_REST_Menu_Items_Controller{}

Хуков нет.

Возвращает

Массив. Item schema data.

Использование

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

Список изменений

С версии 5.9.0 Введена.

Код WP_REST_Menu_Items_Controller::get_item_schema() WP 6.5.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'   => $this->post_type,
		'type'    => 'object',
	);

	$schema['properties']['title'] = array(
		'description' => __( 'The title for the object.' ),
		'type'        => array( 'string', 'object' ),
		'context'     => array( 'view', 'edit', 'embed' ),
		'properties'  => array(
			'raw'      => array(
				'description' => __( 'Title for the object, as it exists in the database.' ),
				'type'        => 'string',
				'context'     => array( 'edit' ),
			),
			'rendered' => array(
				'description' => __( 'HTML title for the object, transformed for display.' ),
				'type'        => 'string',
				'context'     => array( 'view', 'edit', 'embed' ),
				'readonly'    => true,
			),
		),
	);

	$schema['properties']['id'] = array(
		'description' => __( 'Unique identifier for the object.' ),
		'type'        => 'integer',
		'default'     => 0,
		'minimum'     => 0,
		'context'     => array( 'view', 'edit', 'embed' ),
		'readonly'    => true,
	);

	$schema['properties']['type_label'] = array(
		'description' => __( 'The singular label used to describe this type of menu item.' ),
		'type'        => 'string',
		'context'     => array( 'view', 'edit', 'embed' ),
		'readonly'    => true,
	);

	$schema['properties']['type'] = array(
		'description' => __( 'The family of objects originally represented, such as "post_type" or "taxonomy".' ),
		'type'        => 'string',
		'enum'        => array( 'taxonomy', 'post_type', 'post_type_archive', 'custom' ),
		'context'     => array( 'view', 'edit', 'embed' ),
		'default'     => 'custom',
	);

	$schema['properties']['status'] = array(
		'description' => __( 'A named status for the object.' ),
		'type'        => 'string',
		'enum'        => array_keys( get_post_stati( array( 'internal' => false ) ) ),
		'default'     => 'publish',
		'context'     => array( 'view', 'edit', 'embed' ),
	);

	$schema['properties']['parent'] = array(
		'description' => __( 'The ID for the parent of the object.' ),
		'type'        => 'integer',
		'minimum'     => 0,
		'default'     => 0,
		'context'     => array( 'view', 'edit', 'embed' ),
	);

	$schema['properties']['attr_title'] = array(
		'description' => __( 'Text for the title attribute of the link element for this menu item.' ),
		'type'        => 'string',
		'context'     => array( 'view', 'edit', 'embed' ),
		'arg_options' => array(
			'sanitize_callback' => 'sanitize_text_field',
		),
	);

	$schema['properties']['classes'] = array(
		'description' => __( 'Class names for the link element of this menu item.' ),
		'type'        => 'array',
		'items'       => array(
			'type' => 'string',
		),
		'context'     => array( 'view', 'edit', 'embed' ),
		'arg_options' => array(
			'sanitize_callback' => static function ( $value ) {
				return array_map( 'sanitize_html_class', wp_parse_list( $value ) );
			},
		),
	);

	$schema['properties']['description'] = array(
		'description' => __( 'The description of this menu item.' ),
		'type'        => 'string',
		'context'     => array( 'view', 'edit', 'embed' ),
		'arg_options' => array(
			'sanitize_callback' => 'sanitize_text_field',
		),
	);

	$schema['properties']['menu_order'] = array(
		'description' => __( 'The DB ID of the nav_menu_item that is this item\'s menu parent, if any, otherwise 0.' ),
		'context'     => array( 'view', 'edit', 'embed' ),
		'type'        => 'integer',
		'minimum'     => 1,
		'default'     => 1,
	);

	$schema['properties']['object'] = array(
		'description' => __( 'The type of object originally represented, such as "category", "post", or "attachment".' ),
		'context'     => array( 'view', 'edit', 'embed' ),
		'type'        => 'string',
		'arg_options' => array(
			'sanitize_callback' => 'sanitize_key',
		),
	);

	$schema['properties']['object_id'] = array(
		'description' => __( 'The database ID of the original object this menu item represents, for example the ID for posts or the term_id for categories.' ),
		'context'     => array( 'view', 'edit', 'embed' ),
		'type'        => 'integer',
		'minimum'     => 0,
		'default'     => 0,
	);

	$schema['properties']['target'] = array(
		'description' => __( 'The target attribute of the link element for this menu item.' ),
		'type'        => 'string',
		'context'     => array( 'view', 'edit', 'embed' ),
		'enum'        => array(
			'_blank',
			'',
		),
	);

	$schema['properties']['url'] = array(
		'description' => __( 'The URL to which this menu item points.' ),
		'type'        => 'string',
		'format'      => 'uri',
		'context'     => array( 'view', 'edit', 'embed' ),
		'arg_options' => array(
			'validate_callback' => static function ( $url ) {
				if ( '' === $url ) {
					return true;
				}

				if ( sanitize_url( $url ) ) {
					return true;
				}

				return new WP_Error(
					'rest_invalid_url',
					__( 'Invalid URL.' )
				);
			},
		),
	);

	$schema['properties']['xfn'] = array(
		'description' => __( 'The XFN relationship expressed in the link of this menu item.' ),
		'type'        => 'array',
		'items'       => array(
			'type' => 'string',
		),
		'context'     => array( 'view', 'edit', 'embed' ),
		'arg_options' => array(
			'sanitize_callback' => static function ( $value ) {
				return array_map( 'sanitize_html_class', wp_parse_list( $value ) );
			},
		),
	);

	$schema['properties']['invalid'] = array(
		'description' => __( 'Whether the menu item represents an object that no longer exists.' ),
		'context'     => array( 'view', 'edit', 'embed' ),
		'type'        => 'boolean',
		'readonly'    => true,
	);

	$taxonomies = wp_list_filter( get_object_taxonomies( $this->post_type, 'objects' ), array( 'show_in_rest' => true ) );

	foreach ( $taxonomies as $taxonomy ) {
		$base                          = ! empty( $taxonomy->rest_base ) ? $taxonomy->rest_base : $taxonomy->name;
		$schema['properties'][ $base ] = array(
			/* translators: %s: taxonomy name */
			'description' => sprintf( __( 'The terms assigned to the object in the %s taxonomy.' ), $taxonomy->name ),
			'type'        => 'array',
			'items'       => array(
				'type' => 'integer',
			),
			'context'     => array( 'view', 'edit' ),
		);

		if ( 'nav_menu' === $taxonomy->name ) {
			$schema['properties'][ $base ]['type'] = 'integer';
			unset( $schema['properties'][ $base ]['items'] );
		}
	}

	$schema['properties']['meta'] = $this->meta->get_field_schema();

	$schema_links = $this->get_schema_links();

	if ( $schema_links ) {
		$schema['links'] = $schema_links;
	}

	$this->schema = $schema;

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