Как установить и настроить REST API для собственного плагина

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

Что такое REST API в WordPress и зачем он нужен

REST API (Representational State Transfer Application Programming Interface) — это интерфейс, который позволяет взаимодействовать с ресурсами сайта при помощи HTTP-запросов. В WordPress он встроен из коробки начиная с версии 4.7 и предоставляет стандартные маршруты для работы с постами, пользователями, таксономиями и другими сущностями.

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

Настройка REST API в собственном плагине позволяет:

  • Создавать и получать данные нестандартных типов;
  • Обеспечивать безопасный доступ к функциям плагина;
  • Интегрироваться с внешними системами и сервисами;
  • Создавать гибкие интерфейсы для AJAX-запросов и SPA.

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

Для начала создадим простой плагин, который добавит новый REST API маршрут. Пусть плагин будет называться wordpresses-rest-api-demo.

Основной шаг — регистрация маршрута через хук rest_api_init. Вот базовый пример:

add_action('rest_api_init', 'wordpresses_register_demo_route');

function wordpresses_register_demo_route() {
    register_rest_route('wordpresses/v1', '/hello/', array(
        'methods' => 'GET',
        'callback' => 'wordpresses_demo_hello_callback',
        'permission_callback' => '__return_true', // Пока без проверки прав
    ));
}

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

Этот код создаст эндпоинт /wp-json/wordpresses/v1/hello/, который вернёт простой JSON с сообщением. Проверить можно, открыв этот URL в браузере.

Объяснение параметров функции register_rest_route

Первый параметр — пространство имён и версия API, чтобы не конфликтовать с другими маршрутами. Второй — путь маршрута. Третий — массив с настройками:

  • methods — HTTP методы, например, GET, POST, PUT;
  • callback — функция, которая возвращает ответ;
  • permission_callback — функция, проверяющая права доступа. Лучше не оставлять __return_true в продакшене.

Добавление параметров и валидация запроса

Реальные API обычно принимают параметры, например, фильтры или идентификаторы. В WordPress REST API параметры передаются через URL или тело запроса.

Расширим пример, чтобы принимать параметр name и возвращать персональное приветствие:

add_action('rest_api_init', 'wordpresses_register_greet_route');

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

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

Теперь запрос /wp-json/wordpresses/v1/greet?name=Иван вернёт персональное приветствие.

Разрешения и безопасность: permission_callback

Очень важно ограничить доступ к REST API, особенно если он управляет изменением данных или возвращает конфиденциальную информацию. В WordPresses для проверки прав часто используют current_user_can().

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

function wordpresses_permission_check() {
    return current_user_can('manage_options');
}

register_rest_route('wordpresses/v1', '/admin-data/', array(
    'methods' => 'GET',
    'callback' => 'wordpresses_admin_data_callback',
    'permission_callback' => 'wordpresses_permission_check',
));

Без выполнения условия пользователь получит ошибку 403 Forbidden.

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

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

Пример структуры таблицы wp_wordpresses_reviews:

  • id — идентификатор;
  • user_name — имя пользователя;
  • review_text — текст отзыва;
  • created_at — дата создания.

Регистрация маршрутов:

add_action('rest_api_init', function () {
    register_rest_route('wordpresses/v1', '/reviews/', array(
        'methods' => 'GET',
        'callback' => 'wordpresses_get_reviews',
        'permission_callback' => '__return_true',
    ));

    register_rest_route('wordpresses/v1', '/reviews/', array(
        'methods' => 'POST',
        'callback' => 'wordpresses_add_review',
        'permission_callback' => '__return_true',
        'args' => array(
            'user_name' => array(
                'required' => true,
                'sanitize_callback' => 'sanitize_text_field',
            ),
            'review_text' => array(
                'required' => true,
                'sanitize_callback' => 'sanitize_textarea_field',
            ),
        ),
    ));
});

function wordpresses_get_reviews() {
    global $wpdb;
    $table = $wpdb->prefix . 'wordpresses_reviews';
    $results = $wpdb->get_results("SELECT user_name, review_text, created_at FROM $table ORDER BY created_at DESC", ARRAY_A);
    return $results;
}

function wordpresses_add_review(WP_REST_Request $request) {
    global $wpdb;
    $table = $wpdb->prefix . 'wordpresses_reviews';
    $user_name = $request->get_param('user_name');
    $review_text = $request->get_param('review_text');

    $inserted = $wpdb->insert($table, array(
        'user_name' => $user_name,
        'review_text' => $review_text,
        'created_at' => current_time('mysql'),
    ));

    if ($inserted) {
        return new WP_REST_Response(array('success' => true, 'message' => 'Отзыв добавлен'), 201);
    } else {
        return new WP_REST_Response(array('success' => false, 'message' => 'Ошибка при добавлении отзыва'), 500);
    }
}

Таким образом, можно через HTTP GET получить все отзывы, а через POST добавить новый. Для реального плагина нужно добавить проверки, аутентификацию и защиту от спама.

Используем популярные плагины для расширения REST API

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

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

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

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

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

  • Postman — мощный клиент для отправки HTTP-запросов с удобным интерфейсом;
  • curl — консольный инструмент для быстрого теста;
  • REST API Console — плагины и расширения браузера для удобной проверки API.

При разработке стоит внимательно смотреть логи сервера, а для отладки можно использовать error_log() или WP_DEBUG.

Заключение

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

WordPress AJAX без плагинов: создание динамичных функций своими руками
23.11.2025
Как создать автоматическое отправление email в WordPress по расписанию
06.01.2026
Как создать динамический список постов с фильтром по таксономии в WordPress
13.01.2026
Как создать динамический фильтр товаров в WooCommerce без плагинов
09.01.2026
Как создать собственный вид записи в WordPress для специфических типов данных
15.12.2025