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

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

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

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

Собственный REST API поможет:

  • Создавать новые интерфейсы для мобильных приложений или SPA (Single Page Application);
  • Интегрировать WordPress с внешними сервисами;
  • Обеспечить безопасный и удобный доступ к специфичным данным;
  • Управлять кастомными типами записей и метаданными.

Далее мы рассмотрим, как регистрировать свои маршруты и обработчики запросов.

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

Чтобы добавить новый маршрут в REST API WordPress, используется функция register_rest_route. Её нужно вызывать в хук rest_api_init. Вот базовый пример, как это сделать:

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

function wpteam_hello_world() {
    return array('message' => 'Привет, REST API от WPTeam!');
}

В этом примере мы регистрируем маршрут /wp-json/wpteam/v1/hello, который при GET-запросе возвращает простой JSON с приветствием. Это самое простое, с чего стоит начать.

Обратите внимание на структуру маршрута: wpteam/v1 — пространство имён и версия API, что помогает структурировать ваши эндпоинты и поддерживать обратную совместимость.

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

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

add_action('rest_api_init', 'wpteam_register_post_route');
function wpteam_register_post_route() {
    register_rest_route('wpteam/v1', '/post/(?P<id>\d+)', array(
        'methods' => 'GET',
        'callback' => 'wpteam_get_post_by_id',
        'args' => array(
            'id' => array(
                'validate_callback' => function($param, $request, $key) {
                    return is_numeric($param) && $param > 0;
                }
            ),
        ),
    ));
}

function wpteam_get_post_by_id($request) {
    $id = intval($request['id']);
    $post = get_post($id);
    if (empty($post) || $post->post_status !== 'publish') {
        return new WP_Error('post_not_found', 'Запись не найдена', array('status' => 404));
    }
    return array(
        'id' => $post->ID,
        'title' => $post->post_title,
        'content' => apply_filters('the_content', $post->post_content),
    );
}

Здесь мы создаём маршрут с динамическим параметром id и проверяем, что это положительное число. Если запись с таким ID не опубликована или не существует, возвращаем ошибку с HTTP статусом 404.

Авторизация и права доступа в собственном REST API

Очень важно контролировать, кто и что может делать через ваш API. Для этого в register_rest_route можно задать параметр permission_callback, который проверит права пользователя.

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

add_action('rest_api_init', function() {
    register_rest_route('wpteam/v1', '/protected-data', array(
        'methods' => 'GET',
        'callback' => 'wpteam_get_protected_data',
        'permission_callback' => 'wpteam_check_permissions',
    ));
});

function wpteam_get_protected_data() {
    return array('secret' => 'Только для авторизованных пользователей');
}

В этом примере доступ к эндпоинту получат только пользователи с правом edit_posts, то есть авторы и выше. Если права не подтверждены, API вернёт ошибку 403.

Пример: создание REST API для кастомного типа записи "Проект"

Предположим, у вас есть кастомный тип записи project, и вы хотите создать API для получения списка проектов и отдельного проекта по ID.

Сначала регистрируем маршруты:

add_action('rest_api_init', function() {
    register_rest_route('wpteam/v1', '/projects', array(
        'methods' => 'GET',
        'callback' => 'wpteam_get_projects',
        'permission_callback' => '__return_true',
    ));
    register_rest_route('wpteam/v1', '/projects/(?P<id>\d+)', array(
        'methods' => 'GET',
        'callback' => 'wpteam_get_project_by_id',
        'permission_callback' => '__return_true',
        'args' => array(
            'id' => array(
                'validate_callback' => 'is_numeric',
            ),
        ),
    ));
});

function wpteam_get_projects() {
    $args = array(
        'post_type' => 'project',
        'post_status' => 'publish',
        'numberposts' => 10,
    );
    $projects = get_posts($args);
    $data = array();
    foreach ($projects as $project) {
        $data[] = array(
            'id' => $project->ID,
            'title' => $project->post_title,
            'excerpt' => $project->post_excerpt,
        );
    }
    return $data;
}

function wpteam_get_project_by_id($request) {
    $id = intval($request['id']);
    $project = get_post($id);
    if (!$project || $project->post_type !== 'project') {
        return new WP_Error('project_not_found', 'Проект не найден', array('status' => 404));
    }
    return array(
        'id' => $project->ID,
        'title' => $project->post_title,
        'content' => apply_filters('the_content', $project->post_content),
    );
}

Таким образом, вы получите два REST API эндпоинта:
/wp-json/wpteam/v1/projects — список проектов
/wp-json/wpteam/v1/projects/{id} — конкретный проект по ID

Использование плагинов для расширения REST API WordPress

Хотя создание собственного API — это гибко, иногда удобно использовать готовые решения для быстрого старта или расширения функционала.

Рассмотрим несколько полезных плагинов:

  • WP REST API Controller — позволяет управлять доступом к стандартным эндпоинтам и создавать свои без кода.
  • Advanced Custom Fields to REST API — добавляет поля ACF к ответам стандартного REST API.
  • JWT Authentication for WP REST API — добавляет поддержку JWT токенов для авторизации через API.

Эти плагины помогут улучшить работу с REST API и повысить безопасность.

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

Безопасность — ключевой момент при работе с API. Вот несколько рекомендаций:

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

Соблюдение этих правил поможет избежать уязвимостей и защитить сайт.

Итоги и рекомендации по работе с собственным REST API в WordPress

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

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

Практика и опыт позволят создавать удобные и надёжные API, которые станут основой для современных интерфейсов и приложений на базе WordPress.

Как создать автоматический импорт данных из Google Sheets в WordPress
21.01.2026
Запрет на автоматическую регистрацию пользователей в WordPress с подтверждением email
29.01.2026
Как создать динамическую таблицу в WordPress с помощью плагинов и кода
12.02.2026
Как автоматизировать удаление старого контента в WordPress с помощью WP-Cron и кода
21.03.2026
Как создать автоматический импорт данных из Excel в WordPress
18.12.2025

Возникли задачи по WP? Вы можете задать свой вопрос на FAQwp.com Либо обратиться к специалистам поддержки.