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

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

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

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

Создание собственных эндпоинтов позволяет:

  • Безопасно и удобно передавать данные между фронтендом и бэкендом;
  • Интегрировать WordPress с внешними сервисами;
  • Создавать мобильные приложения и SPA на базе данных WordPress;
  • Автоматизировать задачи и создавать кастомные панели управления.

Далее мы рассмотрим, как именно это сделать.

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

Для регистрации нового эндпоинта используется функция register_rest_route. Она вызывается в хуке rest_api_init. Вот минимальный пример из файла functions.php или собственного плагина:

add_action('rest_api_init', 'wpupdate_register_custom_endpoint');
function wpupdate_register_custom_endpoint() {
    register_rest_route('wpupdate/v1', '/hello/', array(
        'methods' => 'GET',
        'callback' => 'wpupdate_hello_endpoint'
    ));
}

function wpupdate_hello_endpoint(WP_REST_Request $request) {
    return array('message' => 'Привет от wpupdate.ru!');
}

Объяснение кода:

  • Используем пространство имён wpupdate/v1 для версии и уникальности маршрутов;
  • Эндпоинт будет доступен по URL /wp-json/wpupdate/v1/hello/;
  • Метод — GET, то есть запросы на получение данных;
  • Функция-обработчик возвращает массив, который WordPress конвертирует в JSON.

Этот пример отлично подходит для начала. Попробуйте открыть в браузере https://ваш-сайт/wp-json/wpupdate/v1/hello/ и увидите JSON-ответ.

Работа с параметрами запроса и валидация данных

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

Пример эндпоинта, принимающего параметр name и возвращающего персональное приветствие:

add_action('rest_api_init', 'wpupdate_register_greet_endpoint');
function wpupdate_register_greet_endpoint() {
    register_rest_route('wpupdate/v1', '/greet/', array(
        'methods' => 'GET',
        'callback' => 'wpupdate_greet_user',
        'args' => array(
            'name' => array(
                'required' => true,
                'validate_callback' => function($param, $request, $key) {
                    return is_string($param) && strlen($param) > 0;
                },
                'sanitize_callback' => 'sanitize_text_field'
            )
        )
    ));
}

function wpupdate_greet_user(WP_REST_Request $request) {
    $name = $request->get_param('name');
    return array('message' => 'Привет, ' . $name . '! Добро пожаловать на wpupdate.ru');
}

Здесь мы требуем, чтобы параметр name был строкой и не пустым, а затем используем его в ответе. Если параметр не передать или он не пройдет валидацию, WordPress вернёт ошибку 400.

Создание эндпоинта для записи данных: пример POST запроса

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

add_action('rest_api_init', 'wpupdate_register_feedback_endpoint');
function wpupdate_register_feedback_endpoint() {
    register_rest_route('wpupdate/v1', '/feedback/', array(
        'methods' => 'POST',
        'callback' => 'wpupdate_save_feedback',
        'args' => array(
            'user' => array(
                'required' => true,
                'sanitize_callback' => 'sanitize_text_field'
            ),
            'message' => array(
                'required' => true,
                'sanitize_callback' => 'sanitize_textarea_field'
            )
        ),
        'permission_callback' => function() {
            return current_user_can('edit_posts'); // Проверяем права
        }
    ));
}

function wpupdate_save_feedback(WP_REST_Request $request) {
    $user = $request->get_param('user');
    $message = $request->get_param('message');
    $all_feedback = get_option('wpupdate_feedback_list', array());
    $all_feedback[] = array('user' => $user, 'message' => $message, 'date' => current_time('mysql'));
    update_option('wpupdate_feedback_list', $all_feedback);
    return array('success' => true, 'message' => 'Отзыв сохранён.');
}

Ключевые моменты:

  • Используем метод POST для отправки данных;
  • Определяем необходимые параметры и их санитизацию;
  • Включаем проверку прав доступа с помощью permission_callback;
  • Сохраняем данные в опцию WordPress, имитируя базу отзывов.

Такой подход можно расширять, сохранять данные в кастомных таблицах или CPT.

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

В REST API важно корректно обрабатывать ошибки. Если что-то пошло не так — нужно возвращать понятный ответ с HTTP статусом.

Пример возврата ошибки из обработчика:

function wpupdate_save_feedback(WP_REST_Request $request) {
    $user = $request->get_param('user');
    $message = $request->get_param('message');
    if (empty($message)) {
        return new WP_Error('empty_message', 'Сообщение не может быть пустым', array('status' => 422));
    }
    // Сохраняем отзыв
    return array('success' => true);
}

WordPress автоматически конвертирует объект WP_Error в JSON и поставит HTTP статус, указанный в параметрах.

Практические советы по безопасности REST API

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

  • Используйте permission_callback для ограничения доступа. Например, для публичных данных можно вернуть __return_true, а для приватных — проверять права пользователя;
  • Всегда валидируйте и санитизируйте входящие данные;
  • Избегайте раскрытия лишних данных, особенно пользовательских и системных;
  • Если требуется аутентификация, используйте стандартные методы WordPress (cookie, nonce) или JWT/Basic Auth с плагинами;
  • Тестируйте API на предмет возможных уязвимостей, например, SQL-инъекций или XSS.

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

Чтобы использовать созданный эндпоинт на фронтенде, можно отправлять запросы через fetch. Пример запроса к нашему первому эндпоинту:

fetch('/wp-json/wpupdate/v1/hello/')
  .then(response => response.json())
  .then(data => console.log(data.message));

Для POST-запроса с отзывом:

fetch('/wp-json/wpupdate/v1/feedback/', {
    method: 'POST',
    headers: {
        'Content-Type': 'application/json',
        'X-WP-Nonce': wpApiSettings.nonce // Обязательно передавайте nonce для авторизации
    },
    body: JSON.stringify({ user: 'Иван', message: 'Отличный сайт!' })
})
.then(res => res.json())
.then(data => console.log(data));
<

Для передачи nonce можно использовать функцию wp_localize_script в PHP, чтобы передать его в JS.

Выводы и рекомендации

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

Начинайте с простых GET-запросов, постепенно добавляйте сложную логику и методы, и вы быстро сможете интегрировать WordPress с любыми внешними сервисами или строить уникальные пользовательские интерфейсы.

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

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
Как автоматизировать создание резервных копий в WordPress: практические решения
03.01.2026
Создание автоматических редиректов в WordPress без плагинов
17.01.2026
Как использовать хуки и фильтры в WordPress: подробное руководство для начинающих
13.11.2025
Оптимизация загрузки шрифтов в WordPress: улучшение скорости и производительности
23.11.2025
Как автоматизировать обновления плагинов в WordPress без рисков
25.12.2025