Как создать собственный REST API endpoint в WordPress

WordPress из коробки поддерживает REST API, позволяя работать с контентом сайта через HTTP-запросы. Однако часто возникает необходимость добавить собственные API endpoints, чтобы расширить функциональность сайта или интегрироваться с внешними сервисами. В этой статье подробно разберём, как создать собственный REST API endpoint в WordPress на примере практического кода.

Что такое REST API endpoint и зачем он нужен в WordPress

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

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

Регистрация собственного REST API endpoint в WordPress

Для создания собственного endpoint мы будем использовать функцию register_rest_route, которая принимает пространство имён, путь и параметры маршрута, включая методы, обработчики и права доступа.

Добавим следующий код в файл functions.php вашей темы или в отдельный плагин:

add_action('rest_api_init', 'wptour_register_custom_endpoint');
function wptour_register_custom_endpoint() {
    register_rest_route('wptour/v1', '/data/(?P<id>\d+)', [
        'methods' => 'GET',
        'callback' => 'wptour_get_custom_data',
        'permission_callback' => '__return_true',
    ]);
}

function wptour_get_custom_data($request) {
    $id = $request->get_param('id');
    // Здесь может быть логика получения данных из базы или другого источника
    $data = [
        'id' => $id,
        'message' => 'Данные успешно получены для ID ' . $id
    ];
    return rest_ensure_response($data);
}

В этом примере мы регистрируем endpoint /wp-json/wptour/v1/data/<id>, который принимает GET-запрос с параметром ID. Функция wptour_get_custom_data возвращает простой массив с подтверждением.

Разбор параметров register_rest_route

Параметры функции:

  • namespace — пространство имён, чтобы избежать конфликтов, здесь используется wptour/v1;
  • route — путь маршрута, с поддержкой переменных в скобках и регулярных выражений;
  • methods — HTTP методы (GET, POST, PUT, DELETE и др.);
  • callback — функция, обрабатывающая запрос;
  • permission_callback — функция проверки прав доступа, в примере разрешена всем.

Обработка параметров и возврат данных в формате JSON

Для получения параметров запроса используйте объект WP_REST_Request и метод get_param или get_params. В нашем примере мы получили ID из URL и вернули объект с сообщением.

Важно возвращать данные через функцию rest_ensure_response, чтобы WordPress корректно сформировал JSON-ответ и HTTP-заголовки.

Пример POST-запроса и проверка прав доступа

Часто нужно принимать данные методом POST и защищать endpoint от неавторизованных пользователей. Добавим пример:

add_action('rest_api_init', 'wptour_register_post_endpoint');
function wptour_register_post_endpoint() {
    register_rest_route('wptour/v1', '/save-data', [
        'methods' => 'POST',
        'callback' => 'wptour_save_custom_data',
        'permission_callback' => 'wptour_check_permission',
    ]);
}

function wptour_save_custom_data($request) {
    $params = $request->get_json_params();
    $title = sanitize_text_field($params['title'] ?? '');
    $content = sanitize_textarea_field($params['content'] ?? '');
    if (empty($title) || empty($content)) {
        return new WP_Error('invalid_data', 'Отсутствуют обязательные поля', ['status' => 400]);
    }
    // Пример создания поста
    $post_id = wp_insert_post([
        'post_title' => $title,
        'post_content' => $content,
        'post_status' => 'draft',
        'post_type' => 'post',
    ]);
    if (is_wp_error($post_id)) {
        return new WP_Error('db_error', 'Ошибка при сохранении данных', ['status' => 500]);
    }
    return rest_ensure_response(['post_id' => $post_id, 'message' => 'Пост успешно создан']);
}

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

В этом примере мы регистрируем POST endpoint /wp-json/wptour/v1/save-data, который принимает JSON с title и content, проверяет авторизацию пользователя (только пользователи с правом edit_posts могут создавать посты) и создаёт запись.

Полезные советы и лучшие практики при создании REST API endpoint

При разработке собственных API endpoints в WordPress стоит учитывать несколько важных моментов:

  • Безопасность: всегда проверяйте права доступа через permission_callback, особенно если endpoint изменяет данные.
  • Валидация и очистка данных: используйте функции sanitize_text_field, sanitize_textarea_field и другие для очистки входящих данных.
  • Обработка ошибок: возвращайте объекты WP_Error с корректным HTTP-статусом для информирования клиента.
  • Документирование API: описывайте параметры и возвращаемые данные, чтобы упростить интеграцию.
  • Кэширование: если данные не меняются часто, используйте кэширование для повышения производительности.

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

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

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

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

Пример интеграции собственного REST API endpoint с JavaScript

Для вызова созданного нами GET endpoint на стороне клиента можно использовать fetch:

fetch('/wp-json/wptour/v1/data/123')
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error('Ошибка:', error));

Для POST-запроса с авторизацией через nonce или JWT нужно настроить заголовки и тело запроса соответственно. Такой подход позволяет строить SPA или мобильные приложения, обращающиеся к вашему WordPress-сайту через REST API.

Как автоматизировать управление переадресациями в WordPress
10.04.2026
Как удалить или изменить атрибуты изображений в WordPress без плагинов
21.02.2026
Как использовать REST API для автоматического отображения отзывов в WordPress
13.04.2026
Как использовать WPCommunity для создания форума в WordPress
21.12.2025
Как создать динамические шорткоды в WordPress: практическое руководство
31.10.2025

Уроки со скриншотами, подробные руководства