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

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

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

REST API — это интерфейс взаимодействия с сайтом через стандартные HTTP методы (GET, POST, PUT, DELETE). По умолчанию WordPress предоставляет множество стандартных эндпоинтов для работы с постами, пользователями, таксономиями и т.д. Но что делать, если ваш проект требует нестандартной логики или работы с кастомными данными? Ответ — создавать собственные REST API эндпоинты.

Преимущества кастомных эндпоинтов:

  • Гибкость — реализуете именно ту функциональность, которая нужна;
  • Безопасность — контролируете доступ и проверяете права;
  • Оптимизация — возвращаете только нужные данные, уменьшаете нагрузку;
  • Интеграция — упрощаете взаимодействие с внешними сервисами.

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

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

add_action('rest_api_init', function () {
    register_rest_route('wpplugin/v1', '/latest-posts/', array(
        'methods' => 'GET',
        'callback' => 'wpplugin_get_latest_posts',
        'permission_callback' => '__return_true', // публичный доступ
    ));
});

function wpplugin_get_latest_posts(WP_REST_Request $request) {
    $args = array(
        'numberposts' => 5,
        'post_status' => 'publish'
    );
    $posts = get_posts($args);
    $data = array();
    foreach ($posts as $post) {
        $data[] = array(
            'id' => $post->ID,
            'title' => get_the_title($post),
            'link' => get_permalink($post),
        );
    }
    return rest_ensure_response($data);
}

После добавления этого кода в плагин или файл functions.php вы сможете получить список последних постов, отправив GET-запрос на URL:

https://ваш-сайт.ru/wp-json/wpplugin/v1/latest-posts/

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

Часто требуется принимать параметры в запросе, например, количество постов или тип поста. Это делается через объект WP_REST_Request, который передаётся в callback-функцию.

Допустим, добавим параметр count, который контролирует количество выводимых записей:

add_action('rest_api_init', function () {
    register_rest_route('wpplugin/v1', '/posts/', array(
        'methods' => 'GET',
        'callback' => 'wpplugin_get_posts_with_count',
        'permission_callback' => '__return_true',
        'args' => array(
            'count' => array(
                'validate_callback' => function($param, $request, $key) {
                    return is_numeric($param) && $param > 0 && $param <= 20;
                },
                'default' => 5
            ),
        ),
    ));
});

function wpplugin_get_posts_with_count(WP_REST_Request $request) {
    $count = (int) $request->get_param('count');
    $args = array(
        'numberposts' => $count,
        'post_status' => 'publish'
    );
    $posts = get_posts($args);
    $data = array();
    foreach ($posts as $post) {
        $data[] = array(
            'id' => $post->ID,
            'title' => get_the_title($post),
            'excerpt' => get_the_excerpt($post),
            'link' => get_permalink($post),
        );
    }
    return rest_ensure_response($data);
}

Теперь запрос https://ваш-сайт.ru/wp-json/wpplugin/v1/posts/?count=10 вернёт 10 последних записей, а если параметр не указан — 5 (по умолчанию). Обратите внимание на валидацию параметров, это важный элемент безопасности и стабильности.

Добавление прав доступа и аутентификации REST API эндпоинтов

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

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

add_action('rest_api_init', function () {
    register_rest_route('wpplugin/v1', '/user-data/', array(
        'methods' => 'GET',
        'callback' => 'wpplugin_get_user_data',
        'permission_callback' => function() {
            return is_user_logged_in();
        },
    ));
});

function wpplugin_get_user_data(WP_REST_Request $request) {
    $current_user = wp_get_current_user();
    if (!$current_user->exists()) {
        return new WP_Error('rest_forbidden', __('Доступ запрещён'), array('status' => 403));
    }
    return rest_ensure_response(array(
        'ID' => $current_user->ID,
        'login' => $current_user->user_login,
        'email' => $current_user->user_email,
    ));
}

При попытке получить данные без авторизации API вернёт ошибку 403. Для авторизации в REST API можно использовать cookie (если запрос с того же домена) или OAuth, JWT и другие методы для внешних приложений.

Практические кейсы использования кастомных REST API эндпоинтов

1. Интеграция с внешним сервисом

Например, вам нужно передавать данные заказов в CRM. Создаёте эндпоинт, который принимает POST запрос с параметрами заказа, валидируете и сохраняете в базе. Это избавит от необходимости использовать громоздкие плагины и позволит максимально оптимизировать процесс.

2. Мобильное приложение или SPA

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

3. Расширение функционала сайта

Создаёте собственные эндпоинты для получения статистики, управления контентом или взаимодействия с пользовательскими данными — это даст гибкость и независимость от стандартных решений.

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

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

Заключение

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

Создать автозаполнение метаданных при загрузке файлов в WordPress
09.02.2026
Как отключить автоматическое обновление WooCommerce без ошибок
06.05.2026
Как добавить поддержку Gutenberg блоков в своем WordPress плагине
23.12.2025
Как настроить автоматическое обновление плагинов WordPress без ошибок
21.02.2026
Как добавить автоматическое сохранение данных через AJAX в WordPress плагине
17.02.2026