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

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

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

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

Кастомные эндпоинты позволяют:

  • Предоставлять данные в нужном формате и структуре
  • Обрабатывать специфичные запросы (например, фильтры, сортировки, авторизацию)
  • Интегрировать WordPress с мобильными приложениями, SPA или внешними сервисами
  • Создавать собственные бизнес-логики на уровне API

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

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

Для создания кастомного эндпоинта в WordPress используется функция register_rest_route(), которую нужно вызывать на хуке rest_api_init. Ниже пример простого эндпоинта, который возвращает приветственное сообщение.

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

function wptest_hello_endpoint(WP_REST_Request $request) {
    return new WP_REST_Response(array(
        'message' => 'Привет от WPTest REST API!'
    ), 200);
}

Объяснение:

  • 'wptest/v1' — пространство имён и версия API
  • '/hello' — маршрут (endpoint)
  • 'methods' => 'GET' — HTTP метод, который поддерживается
  • 'callback' — функция, которая обрабатывает запрос

Теперь, перейдя по URL https://ваш-сайт.ru/wp-json/wptest/v1/hello, вы получите JSON с сообщением.

Добавление параметров и обработка запросов

Часто требуется принимать параметры в запросе для фильтрации данных. Рассмотрим пример эндпоинта, который принимает параметр name и возвращает приветствие с этим именем.

add_action('rest_api_init', function () {
    register_rest_route('wptest/v1', '/greet', array(
        'methods' => 'GET',
        'callback' => 'wptest_greet_endpoint',
        'args' => array(
            'name' => array(
                'required' => true,
                'validate_callback' => function($param, $request, $key) {
                    return is_string($param) && !empty($param);
                },
            ),
        ),
    ));
});

function wptest_greet_endpoint(WP_REST_Request $request) {
    $name = sanitize_text_field($request->get_param('name'));
    return new WP_REST_Response(array(
        'message' => "Привет, $name! Добро пожаловать в WPTest API."
    ), 200);
}

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

Пример: создание кастомного эндпоинта для получения постов с дополнительной логикой

Допустим, вы хотите создать эндпоинт, который возвращает последние посты определённой категории с кастомной структурой данных. Вот пример:

add_action('rest_api_init', function () {
    register_rest_route('wptest/v1', '/posts-by-category', array(
        'methods' => 'GET',
        'callback' => 'wptest_get_posts_by_category',
        'args' => array(
            'category' => array(
                'required' => true,
                'validate_callback' => function($param) {
                    return is_string($param) && !empty($param);
                },
            ),
            'limit' => array(
                'required' => false,
                'default' => 5,
                'validate_callback' => function($param) {
                    return is_numeric($param) && $param > 0 && $param <= 20;
                },
            ),
        ),
    ));
});

function wptest_get_posts_by_category(WP_REST_Request $request) {
    $category = sanitize_text_field($request->get_param('category'));
    $limit = intval($request->get_param('limit'));

    $query = new WP_Query(array(
        'category_name' => $category,
        'posts_per_page' => $limit,
        'post_status' => 'publish',
    ));

    $posts = array();
    if ($query->have_posts()) {
        while ($query->have_posts()) {
            $query->the_post();
            $posts[] = array(
                'id' => get_the_ID(),
                'title' => get_the_title(),
                'excerpt' => get_the_excerpt(),
                'link' => get_permalink(),
                'date' => get_the_date('c'),
            );
        }
        wp_reset_postdata();
    }

    return new WP_REST_Response(array('posts' => $posts), 200);
}

Такой эндпоинт позволяет получить удобный JSON для фронтенда или внешнего сервиса, возвращая только нужные поля и фильтруя по категории.

Безопасность: проверка прав доступа и авторизация

При создании REST API важно контролировать, кто может обращаться к эндпоинтам, особенно если они изменяют данные или возвращают конфиденциальную информацию. В WordPress для этого используется параметр permission_callback.

Например, чтобы разрешить доступ только авторизованным пользователям:

register_rest_route('wptest/v1', '/private-data', array(
    'methods' => 'GET',
    'callback' => 'wptest_private_data',
    'permission_callback' => function () {
        return is_user_logged_in();
    },
));

function wptest_private_data() {
    // Возвращаем приватные данные
    return new WP_REST_Response(array('secret' => 'Только для авторизованных!'), 200);
}

Вы можете реализовать более сложные проверки, например, проверять роли пользователя или использовать nonce.

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

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

  • WP REST API Controller — позволяет управлять доступом к стандартным REST API эндпоинтам и настраивать поля.
  • WPGraphQL — добавляет GraphQL API поверх WordPress, альтернативу REST.
  • JWT Authentication for WP REST API — реализует авторизацию с помощью JWT-токенов.
  • REST API Toolbox — расширяет возможности REST API, добавляя фильтры и хуки.

Отладка и тестирование кастомных эндпоинтов

Для отладки удобно использовать инструменты вроде Postman или curl. Пример запроса:

curl -X GET 'https://ваш-сайт.ru/wp-json/wptest/v1/posts-by-category?category=news&limit=3'

Также можно добавить временный error_log() внутри callback-функций для проверки значений параметров или логики.

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

Как добавить кастомный виджет в WordPress с поддержкой настроек и стилей
11.02.2026
Как удалить неиспользуемые шорткоды в WordPress
18.01.2026
WordPress: как добавить собственные метаполя в посты
19.11.2025
Как автоматизировать обновления плагинов и тем WordPress без риска для сайта
31.01.2026
Как автоматизировать удаление старого контента в WordPress
28.01.2026