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

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

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

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

Однако в реальных проектах часто нужны нестандартные данные или особая логика обработки. Например, нужно вернуть кастомные поля, объединить данные из разных таблиц или реализовать специфику бизнес-логики. Для этого используется регистрация собственных маршрутов (эндпоинтов) и реализация функций-обработчиков.

Создание собственного REST API позволяет:

  • Расширить функциональность стандартного API;
  • Оптимизировать работу фронтенда с сервером;
  • Обеспечить интеграцию с внешними сервисами;
  • Защитить определённые данные и реализовать аутентификацию.

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

Для регистрации собственного маршрута используется функция register_rest_route(). Она вызывается в хук rest_api_init. Рассмотрим пример, как добавить маршрут /wpcatalog/v1/hello, который возвращает простое приветствие.

add_action('rest_api_init', 'wpcatalog_register_routes');

function wpcatalog_register_routes() {
    register_rest_route('wpcatalog/v1', '/hello', array(
        'methods' => 'GET',
        'callback' => 'wpcatalog_handle_hello',
        'permission_callback' => '__return_true',
    ));
}

function wpcatalog_handle_hello(WP_REST_Request $request) {
    return new WP_REST_Response(array('message' => 'Привет, это собственный REST API WordPress!'), 200);
}

В этом примере мы создали маршрут /wp-json/wpcatalog/v1/hello. При обращении к нему через браузер или curl мы получим JSON с сообщением.

Разбор параметров функции register_rest_route

Первый параметр — пространство имён и версия API, здесь wpcatalog/v1. Это помогает логически группировать маршруты.

Второй параметр — путь маршрута /hello. Можно использовать динамические параметры, например /item/(?P\d+).

Третий параметр — массив с настройками, где указываются методы HTTP (GET, POST и др.), callback-функция и проверка прав доступа.

Приём и обработка параметров запроса в REST API

Для более полезного API часто нужно принимать параметры. Рассмотрим пример маршрута, который принимает параметр name и возвращает персональное приветствие.

add_action('rest_api_init', 'wpcatalog_register_greet_route');

function wpcatalog_register_greet_route() {
    register_rest_route('wpcatalog/v1', '/greet', array(
        'methods' => 'GET',
        'callback' => 'wpcatalog_handle_greet',
        'permission_callback' => '__return_true',
        'args' => array(
            'name' => array(
                'required' => false,
                'validate_callback' => function($param, $request, $key) {
                    return is_string($param);
                }
            ),
        ),
    ));
}

function wpcatalog_handle_greet(WP_REST_Request $request) {
    $name = $request->get_param('name') ?: 'Гость';
    return new WP_REST_Response(array('message' => "Привет, {$name}!"), 200);
}

Теперь можно обратиться к /wp-json/wpcatalog/v1/greet?name=Иван и получить персональное сообщение.

Обработка POST-запросов и получение данных

Для создания или обновления данных обычно используют POST-запросы. Рассмотрим пример, где принимается JSON с данными и создаётся новая запись кастомного типа.

add_action('rest_api_init', 'wpcatalog_register_create_post');

function wpcatalog_register_create_post() {
    register_rest_route('wpcatalog/v1', '/create-post', array(
        'methods' => 'POST',
        'callback' => 'wpcatalog_handle_create_post',
        'permission_callback' => function() {
            return current_user_can('edit_posts');
        },
        'args' => array(
            'title' => array('required' => true),
            'content' => array('required' => true),
        ),
    ));
}

function wpcatalog_handle_create_post(WP_REST_Request $request) {
    $title = sanitize_text_field($request->get_param('title'));
    $content = wp_kses_post($request->get_param('content'));

    $post_id = wp_insert_post(array(
        'post_title' => $title,
        'post_content' => $content,
        'post_status' => 'publish',
        'post_type' => 'post',
    ));

    if (is_wp_error($post_id)) {
        return new WP_REST_Response(array('error' => $post_id->get_error_message()), 400);
    }

    return new WP_REST_Response(array('message' => 'Запись создана', 'post_id' => $post_id), 201);
}

Обратите внимание на проверку прав доступа в permission_callback. Это важно для безопасности.

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

Для расширения возможностей REST API можно использовать и готовые плагины:

  • WP REST API Controller — позволяет управлять видимостью стандартных типов и полей в API без кода.
  • Advanced Custom Fields to REST API — добавляет поля ACF в REST API.
  • JWT Authentication for WP REST API — реализует аутентификацию через JSON Web Token для защищённых запросов.

Эти плагины помогают быстро настроить API и интегрировать его с фронтендом или мобильными приложениями.

Советы по безопасности и оптимизации собственного REST API

Создавая собственные эндпоинты, обязательно учитывайте безопасность:

  • Используйте permission_callback для ограничения доступа;
  • Валидацию и санитизацию всех входящих данных;
  • Используйте nonce и аутентификацию, если API используется для управления контентом;
  • Минимизируйте нагрузку, оптимизируя запросы и кешируя результаты.

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

Выводы и рекомендации по созданию собственного REST API

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

Главное — внимательно относиться к безопасности и правильно обрабатывать входящие данные. Используйте встроенные возможности WordPress для валидации и авторизации.

Если вы планируете активно работать с REST API, советую изучить официальную документацию и поэкспериментировать с примерами, приведёнными в статье.

Автоматизация создания и удаления черновиков в WordPress
24.03.2026
WooCommerce: автоматический обзвон покупателей после оформления заказа
16.05.2026
Миграция пользователей между сайтами WordPress: пошаговое руководство с примерами кода
26.12.2025
Как удалить повторяющиеся товары в WooCommerce без плагинов
24.05.2026
Добавление кастомных полей в WooCommerce без плагинов
19.01.2026