Как сделать простой REST API для WordPress

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

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

Создание собственного REST API позволяет интегрировать WordPress с внешними сервисами, мобильными приложениями, а также строить гибкие фронтенды на React, Vue или Angular, используя WordPress только как бекенд.

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

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

Для добавления собственного маршрута используется функция register_rest_route, которую нужно вызывать на хуке rest_api_init. Рассмотрим пример создания маршрута /wpwp/v1/hello, который возвращает простое приветствие.

add_action('rest_api_init', 'wpwp_register_hello_route');

function wpwp_register_hello_route() {
    register_rest_route('wpwp/v1', '/hello', [
        'methods' => 'GET',
        'callback' => 'wpwp_hello_callback',
        'permission_callback' => '__return_true',
    ]);
}

function wpwp_hello_callback(\WP_REST_Request $request) {
    return [
        'message' => 'Привет от wpwp.ru REST API!'
    ];
}

Этот код нужно добавить в файл функций темы functions.php или в плагин. После этого по адресу https://ваш-сайт/wp-json/wpwp/v1/hello вы получите JSON с сообщением.

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

Для более сложных сценариев часто требуется принимать параметры от клиента и валидировать их. Добавим маршрут, который принимает параметр name и возвращает персональное приветствие.

add_action('rest_api_init', 'wpwp_register_greet_route');

function wpwp_register_greet_route() {
    register_rest_route('wpwp/v1', '/greet', [
        'methods' => 'GET',
        'callback' => 'wpwp_greet_callback',
        'permission_callback' => '__return_true',
        'args' => [
            'name' => [
                'required' => true,
                'validate_callback' => function($param, $request, $key) {
                    return is_string($param) && strlen($param) > 0;
                }
            ]
        ]
    ]);
}

function wpwp_greet_callback(\WP_REST_Request $request) {
    $name = sanitize_text_field($request->get_param('name'));
    return [
        'message' => "Привет, $name! Добро пожаловать в wpwp.ru REST API."
    ];
}

Теперь можно делать запросы вида /wp-json/wpwp/v1/greet?name=Иван, и API вернет персональное приветствие.

Защита REST API: проверка прав и аутентификация

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

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

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

add_action('rest_api_init', function() {
    register_rest_route('wpwp/v1', '/admin-data', [
        'methods' => 'GET',
        'callback' => 'wpwp_admin_data_callback',
        'permission_callback' => 'wpwp_permission_check',
    ]);
});

function wpwp_admin_data_callback(\WP_REST_Request $request) {
    return [
        'secret' => 'Это данные, доступные только администраторам'
    ];
}

Если неавторизованный пользователь попробует обратиться к /wp-json/wpwp/v1/admin-data, он получит ошибку 403 Forbidden.

Пример использования REST API для создания записи (POST запрос)

REST API поддерживает различные HTTP методы. Рассмотрим пример создания новой записи типа post с помощью POST запроса.

add_action('rest_api_init', function() {
    register_rest_route('wpwp/v1', '/create-post', [
        'methods' => 'POST',
        'callback' => 'wpwp_create_post_callback',
        'permission_callback' => function() {
            return current_user_can('edit_posts');
        },
        'args' => [
            'title' => [
                'required' => true,
                'sanitize_callback' => 'sanitize_text_field',
            ],
            'content' => [
                'required' => true,
                'sanitize_callback' => 'wp_kses_post',
            ],
        ],
    ]);
});

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

    $post_id = wp_insert_post([
        'post_title' => $title,
        'post_content' => $content,
        'post_status' => 'draft',
        'post_type' => 'post',
    ]);

    if (is_wp_error($post_id)) {
        return new WP_Error('post_creation_failed', 'Не удалось создать запись', ['status' => 500]);
    }

    return [
        'post_id' => $post_id,
        'message' => 'Запись успешно создана в статусе черновика'
    ];
}

Такой маршрут удобно использовать для интеграции с внешними сервисами или мобильными приложениями, которые хотят добавлять контент на сайт.

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

Кроме ручного создания маршрутов, существуют плагины, которые расширяют и упрощают работу с REST API:

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

Использование этих плагинов поможет быстро настроить и обезопасить API без глубокого погружения в программирование.

Советы по отладке и тестированию REST API

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

  • Postman — мощный клиент для отправки HTTP-запросов с поддержкой разных методов, заголовков и тела.
  • curl — командная строка для отправки запросов, например:
    curl -X GET https://ваш-сайт/wp-json/wpwp/v1/hello
  • Браузер — для простых GET-запросов можно просто открыть URL в браузере.

Если возникают ошибки, проверяйте логи сервера и включайте WP_DEBUG в wp-config.php для отображения подробностей.

Итог: расширяем WordPress с помощью собственного REST API

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

В этой статье мы разобрали базовые приемы: регистрацию маршрутов, прием параметров, защиту прав доступа, создание записей через POST, а также полезные плагины и инструменты для работы.

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

Оценка и управление производительностью WordPress с помощью Query Monitor
19.12.2025
WooCommerce: как автоматически удалять товар из корзины после оплаты
29.04.2026
Как сделать динамические изображения в WordPress без плагинов
16.04.2026
Как создать адаптивный блок в WordPress с помощью CSS и PHP
22.02.2026
WooCommerce: как сделать автоподтверждение и изменение статуса заказа после оплаты
21.05.2026