Метод WP_REST_POSTS_CONTROLLER::GET_ITEM_SCHEMA() │ ПУБЛИЧНЫЙ │ WP 4.7.0

# WP_REST_POSTS_CONTROLLER::GET_ITEM_SCHEMA() │ ПУБЛИЧНЫЙ │ WP 4.7.0

Метод GET_ITEM_SCHEMA() получает схему поста, которая соответствует стандарту JSON Schema.

### Описание метода
Метод принадлежит классу WP_REST_Posts_Controller.

### Хуки из метода
- rest_(post_type)_item_schema
- rest_post_item_schema
- rest_page_item_schema
- rest_attachment_item_schema

### Возврат
Метод возвращает массив с данными схемы элемента.

### Использование
Ниже приведен пример использования метода:

```php
$WP_REST_Posts_Controller = new WP_REST_Posts_Controller();
$schema = $WP_REST_Posts_Controller->get_item_schema();

Примеры

Ниже приведен пример из ядра WordPress, который использует метод prepare_item_for_database класса WP_REST_Menus_Controller.

/**
 * Подготавливает отдельный термин для создания или обновления.
 *
 * @since 5.9.0
 *
 * @param WP_REST_Request $request Объект запроса.
 * @return object Подготовленные данные термина.
 */
public function prepare_item_for_database( $request ) {
    $prepared_term = parent::prepare_item_for_database( $request );

    $schema = $this->get_item_schema();

    if ( isset( $request['name'] ) && ! empty( $schema['properties']['name'] ) ) {
        $prepared_term->{'menu-name'} = $request['name'];
    }

    return $prepared_term;
}

Изменения

  • Метод был введен в версии 4.7.0.

Код метода get_item_schema()

Ниже представлен важный код из файла class-wp-rest-posts-controller.php:

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',
        'properties' => array(
            'date' => array(
                'description' => __( "Дата публикации поста в часовом поясе сайта." ),
                'type' => array( 'string', 'null' ),
                'format' => 'date-time',
                'context' => array( 'view', 'edit', 'embed' ),
            ),
            'date_gmt' => array(
                'description' => __( 'Дата публикации поста в GMT.' ),
                'type' => array( 'string', 'null' ),
                'format' => 'date-time',
                'context' => array( 'view', 'edit' ),
            ),
            'guid' => array(
                'description' => __( 'Глобально уникальный идентификатор поста.' ),
                'type' => 'object',
                'context' => array( 'view', 'edit' ),
                'readonly' => true,
                'properties' => array(
                    'raw' => array(
                        'description' => __( 'GUID поста, как он хранился в базе дан��ых.' ),
                        'type' => 'string',
                        'context' => array( 'edit' ),
                        'readonly' => true,
                    ),
                    'rendered' => array(
                        'description' => __( 'GUID поста, преобразованный для отображения.' ),
                        'type' => 'string',
                        'context' => array( 'view', 'edit' ),
                        'readonly' => true,
                    ),
                ),
            ),
            'id' => array(
                'description' => __( 'Уникальный идентификатор поста.' ),
                'type' => 'integer',
                'context' => array( 'view', 'edit', 'embed' ),
                'readonly' => true,
            ),
            'link' => array(
                'description' => __( 'URL на пост.' ),
                'type' => 'string',
                'format' => 'uri',
                'context' => array( 'view', 'edit', 'embed' ),
                'readonly' => true,
            ),
            'modified' => array(
                'description' => __( "Дата последнего изменения поста в часовом поясе сайта." ),
                'type' => 'string',
                'format' => 'date-time',
                'context' => array( 'view', 'edit' ),
                'readonly' => true,
            ),
            'modified_gmt' => array(
                'description' => __( 'Дата последнего изменения поста в GMT.' ),
                'type' => 'string',
                'format' => 'date-time',
                'context' => array( 'view', 'edit' ),
                'readonly' => true,
            ),
            'slug' => array(
                'description' => __( 'Алфавитно-цифровой идентификатор поста, уникальный для его типа.' ),
                'type' => 'string',
                'context' => array( 'view', 'edit', 'embed' ),
            ),
            'status' => array(
                'description' => __( 'Название статуса поста.' ),
                'type' => 'string',
                'enum' => array_keys( get_post_stati( array( 'internal' => false ) ) ),
                'context' => array( 'view', 'edit' ),
            ),
            'type' => array(
                'description' => __( 'Тип поста.' ),
                'type' => 'string',
                'context' => array( 'view', 'edit', 'embed' ),
                'readonly' => true,
            ),
            'password' => array(
                'description' => __( 'Пароль для защиты доступа к контенту и отрывку.' ),
                'type' => 'string',
                'context' => array( 'edit' ),
            ),
        ),
    );

    // Здесь можно добавить дополнительные свойства для конкретного типа поста

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

Заметка

Если вы хотите добавить новые свойства в схему, используйте register_rest_field.

Этот метод предоставляет разработчикам мощный инструмент для работы с постами через REST API WordPress. Он описывает, какие поля доступны и как с ними можно работать.

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *