Как использовать REST API в WordPress для создания своего плагина

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

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

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

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

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

Для примера создадим плагин, который добавляет простой REST API маршрут для вывода списка «задач» (tasks). Предположим, что у нас есть кастомный тип записи task, и мы хотим получить их через API.

Для регистрации маршрута используем хук rest_api_init и функцию register_rest_route. Вот базовый пример:

add_action('rest_api_init', 'wptool_register_task_routes');
function wptool_register_task_routes() {
    register_rest_route('wptool/v1', '/tasks', array(
        'methods' => 'GET',
        'callback' => 'wptool_get_tasks',
        'permission_callback' => function() { return current_user_can('read'); }
    ));
}

function wptool_get_tasks() {
    $args = array('post_type' => 'task', 'posts_per_page' => 10);
    $query = new WP_Query($args);
    $tasks = array();
    foreach ($query->posts as $post) {
        $tasks[] = array(
            'id' => $post->ID,
            'title' => $post->post_title,
            'content' => $post->post_content
        );
    }
    return $tasks;
}

Этот код создает новый маршрут /wp-json/wptool/v1/tasks, который вернет JSON-массив задач. Обратите внимание, что для безопасности мы проверяем, что пользователь имеет право читать данные.

Подробности о параметрах register_rest_route

Функция register_rest_route принимает три параметра — пространство имён (namespace), маршрут (route) и массив опций. В опциях обязательно указывается метод (GET, POST, PUT, DELETE), callback-функция, которая будет обрабатывать запрос, и функция проверки доступа (permission_callback).

Вы можете создавать более сложные маршруты с параметрами, например, /tasks/(?P<id>\d+) для получения конкретной задачи по ID.

Пример POST-запроса: создание новой задачи через REST API

Добавим эндпоинт для создания новой задачи. Для этого зарегистрируем маршрут с методом POST и реализуем обработчик, который получит данные из запроса и создаст запись типа task.

add_action('rest_api_init', 'wptool_register_task_create_route');
function wptool_register_task_create_route() {
    register_rest_route('wptool/v1', '/tasks', array(
        'methods' => 'POST',
        'callback' => 'wptool_create_task',
        'permission_callback' => function() { return current_user_can('edit_posts'); }
    ));
}

function wptool_create_task(WP_REST_Request $request) {
    $title = sanitize_text_field($request->get_param('title'));
    $content = sanitize_textarea_field($request->get_param('content'));

    if (empty($title)) {
        return new WP_Error('no_title', 'Title is required', array('status' => 400));
    }

    $post_id = wp_insert_post(array(
        'post_type' => 'task',
        'post_title' => $title,
        'post_content' => $content,
        'post_status' => 'publish'
    ));

    if (is_wp_error($post_id)) {
        return $post_id;
    }

    return array('message' => 'Task created', 'id' => $post_id);
}

Теперь, отправляя POST-запрос с параметрами title и content на /wp-json/wptool/v1/tasks, можно создавать новые задачи. Важно не забывать про безопасность: проверяем права пользователя и чистим входящие данные функциями sanitize_text_field и sanitize_textarea_field.

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

Для упрощения разработки и тестирования REST API можно использовать несколько полезных плагинов:

  • WP REST API Controller — позволяет настраивать видимость и доступность эндпоинтов для разных типов записей и таксономий без написания кода.
  • REST API Toolbox — добавляет расширенные настройки безопасности и контроля доступа к API.
  • Postman (внешний инструмент) — удобный клиент для тестирования и отладки REST API запросов.

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

Обработка ошибок и безопасность в REST API плагинах

При разработке REST API важно внимательно относиться к безопасности и обработке ошибок. Никогда не доверяйте входящим данным, всегда проверяйте права пользователя через permission_callback. В случае ошибок возвращайте объекты WP_Error с понятными сообщениями и кодами HTTP.

Пример правильной обработки ошибки в callback-функции:

if (empty($title)) {
    return new WP_Error('no_title', 'Title is required', array('status' => 400));
}

Также стоит контролировать скорость запросов и использовать nonce или OAuth для аутентификации, если API открыто для внешних клиентов.

Выводы и рекомендации по использованию REST API в WordPress

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

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

Практика и изучение примеров кода помогут быстро освоить REST API и вывести ваши разработки на новый уровень.

Автоматическое удаление старого контента в WordPress по типу постов и дате
14.03.2026
Как избежать проблем с отображением и обработкой AJAX в WooCommerce
18.05.2026
Как создать автоматическую переадресацию в WordPress по условиям
17.04.2026
Как автоматизировать управление ролями пользователей в WordPress с помощью кода
01.02.2026
Как добавить автоматически работающий кэш в WordPress с примерами кода
01.01.2026