Как добавить собственные поля в WordPress REST API

REST API в WordPress — мощный инструмент для взаимодействия с сайтом на уровне данных. Однако стандартный набор полей в ответах API далеко не всегда покрывает все потребности разработчика. Часто возникает необходимость добавить собственные поля (custom fields) в ответы API, чтобы получить более полную информацию о постах, пользователях или других сущностях.

Что такое собственные поля в WordPress и зачем их добавлять в REST API

Собственные поля (custom fields) — это дополнительные метаданные, которые можно прикреплять к записи, странице или другому типу записи. Их используют для расширения информации, которую хранит WordPress, например, цена товара, рейтинг, дата события и многое другое.

По умолчанию REST API WordPress не возвращает эти данные в ответах. Чтобы использовать их на фронтенде, мобильном приложении или внешних сервисах, нужно явно зарегистрировать и добавить отображение этих полей в API. Это позволит вам получать всю необходимую информацию одним запросом, без дополнительных обращений.

Добавление собственных полей в REST API особенно полезно при создании кастомных тем, плагинов или headless-приложений на React, Vue и других фреймворках.

Регистрация собственных полей в REST API с помощью register_rest_field

Основной способ добавить собственные поля в REST API — использовать функцию register_rest_field. Она позволяет добавить любое дополнительное поле в ответ на запросы к конкретному типу записи.

Рассмотрим пример, где у записей блога есть собственное поле wpvip_custom_rating, которое хранит рейтинг статьи от 1 до 5. Мы хотим, чтобы при запросе к API это поле возвращалось вместе с остальными данными записи.

function wpvip_register_custom_rating_field() {
    register_rest_field(
        'post', // тип записи
        'custom_rating', // имя поля в API
        array(
            'get_callback'    => 'wpvip_get_custom_rating',
            'update_callback' => 'wpvip_update_custom_rating',
            'schema'          => array(
                'description' => 'Рейтинг статьи от 1 до 5',
                'type'        => 'integer',
                'context'     => array('view', 'edit'),
            ),
        )
    );
}
add_action('rest_api_init', 'wpvip_register_custom_rating_field');

function wpvip_get_custom_rating($object, $field_name, $request) {
    return (int) get_post_meta($object['id'], 'wpvip_custom_rating', true);
}

function wpvip_update_custom_rating($value, $object, $field_name) {
    if (!is_numeric($value) || $value < 1 || $value > 5) {
        return new WP_Error('rest_invalid_param', 'Рейтинг должен быть числом от 1 до 5', array('status' => 400));
    }
    return update_post_meta($object->ID, 'wpvip_custom_rating', (int) $value);
}

В этом коде мы регистрируем новое поле custom_rating для типа записи post. В коллбэках определяем, как получить значение из мета-поля и как его обновить через PUT/PATCH-запросы к API.

Пояснения к коду

  • register_rest_field — добавляет поле в ответ API.
  • get_callback — функция, которая возвращает значение поля при получении данных.
  • update_callback — функция, которая обрабатывает обновление значения через API.
  • schema — описание поля для документации и валидации.

Таким образом, теперь в ответах REST API при запросе /wp-json/wp/v2/posts будет дополнительное поле custom_rating с рейтингом.

Добавление нескольких собственных полей и группировка данных

Если у вас несколько связанных пользовательских полей, можно объединить их в один объект. Например, если у вас есть метаданные wpvip_event_date, wpvip_event_location и wpvip_event_speaker, удобно возвращать их как объект event_details в API.

function wpvip_register_event_details_field() {
    register_rest_field(
        'post',
        'event_details',
        array(
            'get_callback' => 'wpvip_get_event_details',
            'schema'       => array(
                'description' => 'Детали события',
                'type'        => 'object',
                'context'     => array('view', 'edit'),
                'properties'  => array(
                    'date'    => array('type' => 'string', 'format' => 'date-time'),
                    'location'=> array('type' => 'string'),
                    'speaker' => array('type' => 'string'),
                ),
            ),
        )
    );
}
add_action('rest_api_init', 'wpvip_register_event_details_field');

function wpvip_get_event_details($object) {
    return array(
        'date'     => get_post_meta($object['id'], 'wpvip_event_date', true),
        'location' => get_post_meta($object['id'], 'wpvip_event_location', true),
        'speaker'  => get_post_meta($object['id'], 'wpvip_event_speaker', true),
    );
}

Такой способ делает API-ответ более структурированным и удобным для обработки на клиенте.

Плагины для работы с метаданными и REST API

Если вы хотите упростить процесс добавления и управления собственными полями в REST API, можно использовать готовые плагины:

  • Advanced Custom Fields (ACF) — позволяет создавать и управлять пользовательскими полями через удобный интерфейс. С помощью дополнительного плагина ACF to REST API можно автоматически добавлять поля в REST API.
  • WP REST API Controller — расширяет возможности управления REST API, включая настройку отображения метаданных.
  • Meta Box — мощный фреймворк для создания метабоксов и полей, с поддержкой REST API.

Использование этих инструментов позволяет минимизировать количество кода и ускорить разработку.

Советы по безопасности и производительности при добавлении собственных полей в REST API

Добавляя кастомные поля в API, важно учитывать несколько моментов:

  • Проверка прав доступа. Не все поля должны быть доступны всем пользователям. Используйте проверки прав (capabilities) в коллбэках, чтобы ограничить доступ к чувствительным данным.
  • Валидация данных. При обновлении полей через API обязательно валидируйте входящие данные, чтобы избежать ошибок и уязвимостей.
  • Кэширование. Если данные требуют сложных вычислений или обращений к базе, реализуйте кэширование результатов, чтобы сократить нагрузку.
  • Минимизируйте количество полей. Возвращайте только необходимые данные, чтобы уменьшить размер ответа и ускорить загрузку.

Пример проверки прав доступа для поля рейтинга:

function wpvip_get_custom_rating($object, $field_name, $request) {
    if (!current_user_can('read_post', $object['id'])) {
        return null;
    }
    return (int) get_post_meta($object['id'], 'wpvip_custom_rating', true);
}

Заключение

Добавление собственных полей в WordPress REST API расширяет возможности вашего сайта и позволяет создавать более гибкие и функциональные решения. Используя register_rest_field, вы можете легко интегрировать любые данные, а с помощью плагинов — ускорить процесс разработки. Не забывайте про безопасность и оптимизацию — это залог стабильной работы вашего приложения.

WooCommerce: автоматическая удалённая отгрузка и синхронизация остатков товаров
24.05.2026
WooCommerce: как исправить проблемы с отправкой писем при изменении статуса заказа
28.04.2026
Как использовать WPCommunity для внедрения функционала сообществ в WordPress
07.01.2026
Как использовать WPVIP для автоматизации управления пользователями в WordPress
17.02.2026
WooCommerce: решение проблем с неотправкой писем подтверждения при изменении статуса заказа
21.05.2026