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

WordPress с версии 4.7 содержит встроенный REST API, который позволяет взаимодействовать с сайтом через HTTP-запросы. Это мощный инструмент для разработчиков, который открывает новые возможности для интеграций, мобильных приложений и SPA (одностраничных приложений). В этой статье мы подробно рассмотрим, как создавать собственные REST API эндпоинты в WordPress, чтобы расширить стандартный функционал и реализовать индивидуальные задачи.

Что такое REST API в WordPress и зачем нужны собственные эндпоинты

REST API — это архитектурный стиль взаимодействия клиент-сервер, основанный на HTTP-протоколе. В WordPress он реализован как набор URL, которые возвращают данные в формате JSON. Стандартный API позволяет работать с постами, пользователями, таксономиями и другими сущностями.

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

Важным моментом является безопасность: нужно контролировать права доступа и валидировать входящие данные, чтобы избежать уязвимостей.

Создание собственного REST API эндпоинта в WordPress

Для регистрации собственного маршрута в REST API используется функция register_rest_route(). Обычно это делают внутри хука rest_api_init. Рассмотрим пример создания простого эндпоинта, который возвращает список последних 5 пользовательских записей с типом book.

add_action('rest_api_init', 'wpassist_register_book_endpoint');
function wpassist_register_book_endpoint() {
    register_rest_route('wpassist/v1', '/books/', array(
        'methods' => 'GET',
        'callback' => 'wpassist_get_books',
        'permission_callback' => '__return_true', // для публичного доступа
    ));
}

function wpassist_get_books() {
    $args = array(
        'post_type' => 'book',
        'posts_per_page' => 5,
    );
    $query = new WP_Query($args);
    $books = array();
    if ($query->have_posts()) {
        while ($query->have_posts()) {
            $query->the_post();
            $books[] = array(
                'id' => get_the_ID(),
                'title' => get_the_title(),
                'link' => get_permalink(),
            );
        }
        wp_reset_postdata();
    }
    return $books;
}

После добавления этого кода в файл темы или плагина, эндпоинт будет доступен по адресу https://your-site.ru/wp-json/wpassist/v1/books/. Он возвращает JSON-массив с последними 5 записями типа book.

Обработка POST-запросов и безопасность REST эндпоинтов

Создание эндпоинтов для получения данных — это только часть задач. Часто нужно принимать данные от клиента и сохранять их. Например, создадим POST-эндпоинт для добавления новой записи типа book с валидацией и проверкой прав пользователя.

add_action('rest_api_init', 'wpassist_register_create_book_endpoint');
function wpassist_register_create_book_endpoint() {
    register_rest_route('wpassist/v1', '/books/', array(
        'methods' => 'POST',
        'callback' => 'wpassist_create_book',
        'permission_callback' => 'wpassist_user_can_edit',
        'args' => array(
            'title' => array(
                'required' => true,
                'sanitize_callback' => 'sanitize_text_field',
            ),
            'content' => array(
                'required' => false,
                'sanitize_callback' => 'sanitize_textarea_field',
            ),
        ),
    ));
}

function wpassist_user_can_edit() {
    return current_user_can('edit_posts');
}

function wpassist_create_book(WP_REST_Request $request) {
    $title = $request->get_param('title');
    $content = $request->get_param('content');

    $post_data = array(
        'post_title' => $title,
        'post_content' => $content,
        'post_status' => 'publish',
        'post_type' => 'book',
    );

    $post_id = wp_insert_post($post_data);

    if (is_wp_error($post_id)) {
        return new WP_Error('cant-create', __('Не удалось создать запись'), array('status' => 500));
    }

    return array('message' => 'Книга успешно создана', 'id' => $post_id);
}

В этом примере мы используем permission_callback для проверки, что пользователь авторизован и имеет права на редактирование записей. Параметры запроса валидируются и очищаются, что предотвращает XSS и SQL-инъекции.

Регистрация собственных полей в REST API и расширение ответа

Иногда нужно, чтобы в ответе API возвращались не только стандартные поля записи, но и метаданные или пользовательские поля. Для этого используется функция register_rest_field(). Пример добавления в ответ поля book_author, хранящегося в метаполе:

add_action('rest_api_init', 'wpassist_register_book_author_field');
function wpassist_register_book_author_field() {
    register_rest_field('book', 'book_author', array(
        'get_callback' => 'wpassist_get_book_author',
        'update_callback' => 'wpassist_update_book_author',
        'schema' => array(
            'description' => 'Автор книги',
            'type' => 'string',
            'context' => array('view','edit'),
        ),
    ));
}

function wpassist_get_book_author($object) {
    return get_post_meta($object['id'], 'book_author', true);
}

function wpassist_update_book_author($value, $object) {
    if (!current_user_can('edit_post', $object->ID)) {
        return new WP_Error('rest_forbidden', __('Нет доступа для редактирования автора'), array('status' => 403));
    }
    return update_post_meta($object->ID, 'book_author', sanitize_text_field($value));
}

Теперь при запросе информации о книге через REST API в JSON будет возвращено поле book_author. Также его можно обновлять через PUT или PATCH запросы.

Полезные плагины для работы с REST API в WordPress

Для ускорения разработки и расширения возможностей REST API существуют готовые плагины:

  • WP REST API Controller — удобный интерфейс для управления доступом к REST API и редактирования эндпоинтов.
  • Advanced Custom Fields (ACF) to REST API — автоматически добавляет поля ACF в ответы REST API.
  • JWT Authentication for WP REST API — добавляет поддержку JWT-токенов для авторизации через REST API.

Использование этих плагинов поможет сократить время разработки и повысить безопасность API.

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

При создании собственных эндпоинтов важно соблюдать несколько правил:

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

Правильная организация REST API позволит создать надежные и быстрые интеграции для вашего WordPress сайта.

Как использовать REST API в WordPress для создания собственных эндпоинтов
08.11.2025
Как использовать hook pre_get_posts для фильтра записей в WordPress
09.12.2025
Как установить и настроить Redis кэш в WordPress для ускорения сайта
30.03.2026
Как удалить пустые записи в WordPress из базы данных
31.01.2026
Как добавить автоподпись в электронные письма WordPress
21.12.2025