Как использовать функцию REGISTER_REST_FIELD() в WordPress 4.7.0

Функция REGISTER_REST_FIELD() │ WP 4.7.0

Функция register_rest_field() позволяет добавить новое поле к существующему типу объекта в WordPress. Это полезно, если вы хотите расширить данные, которые возвращает ваш REST API.

Параметры

register_rest_field( $object_type, $attribute, $args );
  • $object_type (string|array) (обязательный) — тип объекта, к которому привязывается поле, например: "post", "term", "comment" и т.д.
  • $attribute (string) (обязательный) — имя добавляемого атрибута.
  • $args (array) — массив аргументов для настройки поля.

Аргументы

По умолчанию array().

  • get_callback (callable|null) — Функция, которая будет использоваться для получения значения поля. Функции передается подготовленные данные объекта. По умолчанию: null, поле не будет возвращено в ответе.

  • update_callback (callable|null) — Функция, которая используется для задания и обновления значения поля. Функции передается объект модели, например, WP_Post. По умолчанию: null, значение не может быть установлено или обновлено.

  • schema (array|null) — Схема для данного поля. По умолчанию: null, схема не будет возвращена.

Примеры использования

Пример 1: Добавление поля для имени автора поста

Этот пример показывает, как создать поле, которое выводит имя автора поста.

add_action( 'rest_api_init', function() {
    register_rest_field( 'post', 'my_awesome_field', array(
        'get_callback' => function( $post, $field_name, $request ) {
            return get_the_author_meta( 'display_name', $post['author'] );
        },
        'update_callback' => null,
        'schema' => [
            'description' => __( 'Публичное имя пользователя', 'my_domain' ), 
            'type' => 'string'
        ],
    ) );
} );

Теперь вы можете ��айти поле my_awesome_field в JSON-ответе по адресу http://example.com/wp-json/wp/v2/posts.

Пример 2: Получение и обновление пользовательского поля поста

Этот пример демонстрирует, как получить посты по пользовательскому полю и обновить это поле.

add_action( 'rest_api_init', 'slug_register_my_post_types' );

function slug_register_my_post_types() {
    register_rest_field( 'my_post_type', 'my_custom_field', [
        'get_callback'    => function( $object, $field_name, $request ) {
            return get_post_meta( $object['id'], $field_name );
        },
        'update_callback' => function( $value, $object, $field_name ) {
            return update_post_meta( $object->ID, $field_name, strip_tags( $value ) );
        },
        'schema'          => [
            'type'        => 'string',
            'arg_options' => [
                'sanitize_callback' => function( $value ) {
                    // Сделаем значение безопасным для хранения.
                    return sanitize_text_field( $value );
                },
                'validate_callback' => function( $value ) {
                    // Значение считается допустимым, если содержит ровно 10 английских букв.
                    return (bool) preg_match( '/A[a-z]{10}Z/', $value );
                },
            ],
        ],
    ]);
}

Запрос для получения постов, отсортированных по значению пользовательского поля:

GET https://myexample.com/wp-json/wp/v2/my_post_type?filter[meta_query][0][key]=my_custom_field&filter[meta_query][0][value]=my_find_value

Запрос для обновления значения пользовательского поля:

POST https://myexample.com/wp-json/wp/v2/my_post_type/{id}

где {id} — это идентификатор нужного поста.

Пример 3: Добавление поля с URL изображения поста

Этот пример показывает, как добавить поле для главного изображения в ответ данных поста.

add_action( 'rest_api_init', function () {
    register_rest_field( 'post', 'featured_image_url', array(
        'get_callback' => function ( $post_arr ) {
            $image_data = wp_get_attachment_image_src( $post_arr['featured_media'], 'medium' );
            return $image_data[0];
        },
        'update_callback' => null,
        'schema' => null
    ) );
} );

Параметры, передаваемые в функции обратного вызова

Для функции get_callback:

  • $post — (объект) Объект запроса, например WP_Post.
  • $attribute — (строка) Имя поля, указанное во втором параметре функции register_rest_field().
  • $request — (объект) Все данные запроса в форме объекта WP_REST_Request.
  • $object_type — (строка) Тип объекта, для которого зарегистрировано поле. Обычно соответствует значению первого параметра register_rest_field().

Для функции update_callback:

  • $value — Значение из POST-запроса для текущего поля.
  • $post — (объект) Объект запроса, например WP_Post.
  • $attribute — (строка) Имя поля, указанное во втором параметре функции register_rest_field().
  • $request — (объект) Все данные запроса в форме объекта WP_REST_Request.
  • $object_type — (строка) Тип объекта, для которого зарегистрировано поле.

Замечания

  • Глобальный массив: $wp_rest_additional_fields хранит зарегистрированные поля, организованные по типам объектов.

Изменения

Функция была введена в версии 4.7.0.

Leave a Reply

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