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

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

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

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

Преимущества создания собственного REST API:

  • Гибкость: можно возвращать любые данные и выполнять нужные операции.
  • Интеграция: внешние сервисы смогут легко получать и отправлять данные на ваш сайт.
  • Безопасность: можно настроить права доступа и проверять авторизацию.
  • Производительность: оптимизировать ответы под конкретные задачи.

Теперь перейдем к практической части.

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

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

add_action('rest_api_init', 'wplancer_register_custom_route');

function wplancer_register_custom_route() {
    register_rest_route('wplancer/v1', '/hello/', array(
        'methods' => 'GET',
        'callback' => 'wplancer_hello_callback',
        'permission_callback' => '__return_true', // разрешаем всем
    ));
}

function wplancer_hello_callback(WP_REST_Request $request) {
    return array('message' => 'Привет от WPLancer REST API!');
}

Здесь мы добавили маршрут /wp-json/wplancer/v1/hello/, который при GET-запросе возвращает простой JSON с сообщением. Параметр permission_callback отвечает за проверку прав доступа. В примере разрешаем доступ всем.

Тестирование нового маршрута

Чтобы проверить работу, откройте в браузере или с помощью curl следующий URL:

https://ваш-сайт.ru/wp-json/wplancer/v1/hello/

Вы должны увидеть ответ:

{
    "message": "Привет от WPLancer REST API!"
}

Передача параметров и получение данных из запроса

Часто нужно принимать параметры от клиента. Например, добавим маршрут, который принимает имя и возвращает персональное приветствие.

add_action('rest_api_init', 'wplancer_register_greet_route');

function wplancer_register_greet_route() {
    register_rest_route('wplancer/v1', '/greet/', array(
        'methods' => 'GET',
        'callback' => 'wplancer_greet_callback',
        'args' => array(
            'name' => array(
                'required' => true,
                'sanitize_callback' => 'sanitize_text_field',
                'validate_callback' => function($param, $request, $key) {
                    return is_string($param) && !empty($param);
                }
            ),
        ),
        'permission_callback' => '__return_true',
    ));
}

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

Теперь при запросе /wp-json/wplancer/v1/greet/?name=Иван вы получите персональное приветствие. Важно задавать в args параметры, чтобы WordPress сам проверял и очищал входные данные.

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

REST API поддерживает различные HTTP-методы. Создадим маршрут, который принимает POST-запрос с JSON и сохраняет данные как новый пост.

add_action('rest_api_init', 'wplancer_register_create_post_route');

function wplancer_register_create_post_route() {
    register_rest_route('wplancer/v1', '/create-post/', array(
        'methods' => 'POST',
        'callback' => 'wplancer_create_post_callback',
        'permission_callback' => function() {
            return current_user_can('edit_posts');
        },
        'args' => array(
            'title' => array('required' => true, 'sanitize_callback' => 'sanitize_text_field'),
            'content' => array('required' => true, 'sanitize_callback' => 'wp_kses_post'),
        ),
    ));
}

function wplancer_create_post_callback(WP_REST_Request $request) {
    $title = $request->get_param('title');
    $content = $request->get_param('content');

    $post_id = wp_insert_post(array(
        'post_title' => $title,
        'post_content' => $content,
        'post_status' => 'draft',
        'post_author' => get_current_user_id(),
    ));

    if (is_wp_error($post_id)) {
        return new WP_Error('post_creation_failed', 'Ошибка при создании поста', array('status' => 500));
    }

    return array('success' => true, 'post_id' => $post_id);
}

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

Безопасность и авторизация в собственном REST API

Очень важно правильно настроить авторизацию. Часто используют проверку nonce, OAuth, JWT или просто проверяют права пользователя через функции WordPress.

Пример проверки nonce:

function wplancer_permission_callback(WP_REST_Request $request) {
    $nonce = $request->get_header('X-WP-Nonce');
    if (!wp_verify_nonce($nonce, 'wp_rest')) {
        return new WP_Error('forbidden', 'Неверный nonce', array('status' => 403));
    }
    return true;
}

Вызов register_rest_route с таким permission_callback гарантирует, что доступ будет только у пользователей с валидным nonce.

Дополнительные советы по безопасности

  • Используйте current_user_can() для проверки прав.
  • Санитизируйте и валидируйте все входящие данные.
  • Не раскрывайте подробности ошибок клиенту.
  • Ограничивайте методы, разрешённые для маршрута.

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

Вот идеи, которые можно реализовать через собственный REST API:

  • Получение списка заказов пользователя (если есть WooCommerce).
  • Агрегация пользовательских данных из мета-полей.
  • Выгрузка статистики посещений.
  • Внедрение кастомной логики голосований или рейтингов.
  • Интеграция с внешними CRM или ERP системами.

Каждый из этих маршрутов реализуется по аналогии с примерами выше: регистрируем маршрут, обрабатываем параметры и возвращаем JSON.

Заключение

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

Автоматическое удаление товаров с устаревшими атрибутами в WooCommerce
29.04.2026
Как удалить изображения без использования в WordPress
31.05.2026
Как создать уникальные слаги для пользовательских типов записей в WordPress
04.03.2026
Как создать собственный виджет в WordPress с примерами кода
12.12.2025
Автоматическое удаление зависших вариантов товаров в WooCommerce
06.07.2026