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

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

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

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

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

Для регистрации нового endpoint используется хук rest_api_init и функция register_rest_route. Рассмотрим пример, как добавить endpoint, который возвращает список последних 5 постов определенной категории.

add_action('rest_api_init', 'wpboard_register_custom_endpoint');
function wpboard_register_custom_endpoint() {
    register_rest_route('wpboard/v1', '/latest-posts/(?P<category_id>\d+)', [
        'methods' => 'GET',
        'callback' => 'wpboard_get_latest_posts_by_category',
        'permission_callback' => '__return_true', // Позже обсудим безопасность
    ]);
}

function wpboard_get_latest_posts_by_category($request) {
    $category_id = $request['category_id'];
    $args = [
        'posts_per_page' => 5,
        'category' => $category_id,
        'post_status' => 'publish',
    ];
    $posts = get_posts($args);
    $data = [];
    foreach ($posts as $post) {
        $data[] = [
            'id' => $post->ID,
            'title' => get_the_title($post->ID),
            'excerpt' => get_the_excerpt($post->ID),
            'link' => get_permalink($post->ID),
        ];
    }
    return rest_ensure_response($data);
}

В этом примере мы создали endpoint /wp-json/wpboard/v1/latest-posts/{category_id}, который принимает ID категории и возвращает 5 последних постов этой категории.

Пояснения к коду регистрации endpoint

  • rest_api_init — хук для инициализации REST API;
  • register_rest_route — функция, регистрирующая новый маршрут с пространством имён wpboard/v1;
  • permission_callback — проверяет права доступа. В примере стоит __return_true, то есть доступ открыт всем. Для защищённых данных нужно реализовать проверку.

Реализация проверки доступа и безопасность custom REST API endpoint

Очень важно контролировать, кто может использовать ваш endpoint. Если вы возвращаете приватные данные, то надо настроить permission_callback так, чтобы только авторизованные пользователи получали ответ. Рассмотрим, как это сделать.

function wpboard_permission_check($request) {
    return current_user_can('edit_posts'); // Например, разрешаем только редакторам и выше
}

add_action('rest_api_init', function() {
    register_rest_route('wpboard/v1', '/private-data/', [
        'methods' => 'GET',
        'callback' => 'wpboard_get_private_data',
        'permission_callback' => 'wpboard_permission_check',
    ]);
});

function wpboard_get_private_data($request) {
    // Возвращаем какие-то приватные данные
    return rest_ensure_response(['secret' => 'Это секретная информация']);
}

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

Обработка POST-запросов и передача данных в собственный REST API endpoint

Иногда нужно принимать данные от клиента и обрабатывать их. Например, создадим endpoint, который принимает JSON с данными и сохраняет новую запись в пользовательскую таблицу.

add_action('rest_api_init', function() {
    register_rest_route('wpboard/v1', '/save-data', [
        'methods' => 'POST',
        'callback' => 'wpboard_save_custom_data',
        'permission_callback' => function() {
            return is_user_logged_in();
        },
        'args' => [
            'title' => [
                'required' => true,
                'validate_callback' => function($param) {
                    return is_string($param) && !empty($param);
                }
            ],
            'content' => [
                'required' => true,
                'sanitize_callback' => 'sanitize_text_field'
            ],
        ]
    ]);
});

function wpboard_save_custom_data($request) {
    $title = sanitize_text_field($request->get_param('title'));
    $content = sanitize_text_field($request->get_param('content'));

    $post_id = wp_insert_post([
        'post_title' => $title,
        'post_content' => $content,
        'post_status' => 'pending',
        'post_type' => 'post',
    ]);

    if (is_wp_error($post_id)) {
        return new WP_Error('cannot_create', 'Не удалось создать запись', ['status' => 500]);
    }

    return rest_ensure_response(['post_id' => $post_id, 'message' => 'Запись создана и ожидает проверки']);
}

Обратите внимание, что мы используем:

  • permission_callback для проверки, что пользователь авторизован;
  • валидацию и санитизацию входящих данных через args;
  • функцию wp_insert_post для создания записи.

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

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

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

Эти плагины помогут быстро получить нужный функционал и сэкономить время на разработку.

Отладка и тестирование собственного REST API endpoint

После создания собственного endpoint важно его протестировать. Для этого подойдут следующие инструменты:

  • Postman — очень удобный клиент для отправки HTTP-запросов с возможностью настраивать заголовки, тело запроса и смотреть ответы;
  • curl из командной строки — быстрый способ проверить работу endpoint;
  • встроенный REST API браузер — в WordPress можно открыть https://your-site.ru/wp-json/ и изучить доступные маршруты.

Для проверки POST-запросов в Postman можно указать заголовок Content-Type: application/json и передать тело в формате JSON.

Заключение по созданию собственного REST API в WordPress

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

Как использовать метод обновления transient в WordPress для кеширования данных
08.12.2025
Динамические breadcrumbs в WordPress с поддержкой WooCommerce: практическое руководство
13.03.2026
WooCommerce: правильное удаление вариантов товаров через код
13.05.2026
Автоматическое удаление старых transient через transient в WordPress
15.12.2025
Как использовать WPCommunity для создания сообщества на WordPress
23.03.2026