wpcodes.ru wordpress WP Codеs

Как добавить поля в REST API WordPress для автоматизации

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

Почему важно расширять REST API WordPress

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

Добавление новых полей в ответ REST API позволяет:

  • Автоматизировать обработку и синхронизацию данных с внешними сервисами.
  • Создавать более информативные и адаптированные клиентские приложения и SPA.
  • Сократить обращения к базе данных и количество запросов, получая всю нужную информацию сразу.

Расширение REST API — это задача, с которой сталкиваются все разработчики, работающие с кастомными решениями на WordPress.

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

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

Пример: добавляем метаполе "rating" для записей

function wpcodes_register_rest_field_rating() {
    register_rest_field('post', 'rating', [
        'get_callback' => 'wpcodes_get_post_rating',
        'update_callback' => 'wpcodes_update_post_rating',
        'schema' => [
            'description' => 'Рейтинг записи',
            'type' => 'integer',
            'context' => ['view', 'edit']
        ]
    ]);
}
add_action('rest_api_init', 'wpcodes_register_rest_field_rating');

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

function wpcodes_update_post_rating($value, $object, $field_name) {
    if (!is_numeric($value)) {
        return new WP_Error('rest_invalid_param', 'Рейтинг должен быть числом', ['status' => 400]);
    }
    update_post_meta($object->ID, 'rating', intval($value));
    return true;
}

В этом примере мы добавляем поле rating для записей. Оно доступно при получении данных через REST API, а также может обновляться с помощью запросов PUT/PATCH.

Использование плагинов для упрощения расширения REST API

Если хочется не писать код вручную, можно использовать плагины, которые расширяют функционал REST API и позволяют работать с кастомными полями проще. Например:

  • Clearfy Pro — плагин для оптимизации и управления настройками сайта, в том числе расширяет возможности API.
  • WPRemark — плагин для управления комментариями и отзывами, может добавлять свои поля в API.

Используя такие решения, можно быстрее настроить отдачу нужных данных через REST API без глубокого погружения в код.

Расширение REST API для кастомных типов записей и таксономий

Если вы используете кастомные типы записей (CPT), то для них также можно добавлять поля через register_rest_field. Аналогично работает и для таксономий — можно расширять ответ API, добавляя дополнительные поля к терминам.

Пример: добавление поля "icon" для таксономии "product_cat"

function wpcodes_register_rest_field_product_cat_icon() {
    register_rest_field('product_cat', 'icon', [
        'get_callback' => function($term) {
            return get_term_meta($term['id'], 'icon', true);
        },
        'update_callback' => function($value, $term) {
            if (!is_string($value)) {
                return new WP_Error('rest_invalid_param', 'Иконка должна быть строкой', ['status' => 400]);
            }
            update_term_meta($term->term_id, 'icon', sanitize_text_field($value));
            return true;
        },
        'schema' => [
            'description' => 'Иконка категории продукта',
            'type' => 'string',
            'context' => ['view', 'edit']
        ]
    ]);
}
add_action('rest_api_init', 'wpcodes_register_rest_field_product_cat_icon');

Это позволяет в API получать и обновлять поле иконки категории, что полезно для фронтенд-приложений и мобильных приложений.

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

Добавляя поля в REST API, важно учитывать безопасность. Если ваши поля содержат чувствительные данные, убедитесь, что они доступны только авторизованным пользователям, установив соответствующие проверки в коллбеках.

Например, внутри get_callback можно проверить права пользователя через current_user_can и возвращать данные только при наличии прав.

Также учитывайте производительность: если для получения данных требуется сложный SQL-запрос или внешний API, кешируйте результаты, чтобы не перегружать сервер при каждом запросе API.

Итоги и рекомендации

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

Используйте функцию register_rest_field для добавления полей, продумывайте безопасность и кеширование, а при необходимости применяйте плагины из каталога WPShop для ускорения разработки.

×

Создай идеальный сайт – теперь на 15% дешевле!

Подобрать тему →