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

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

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

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

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

Использование REST API открывает широкие возможности для разработки, например:

  • Создание SPA (Single Page Application) на React или Vue, которые общаются с WordPress;
  • Мобильные приложения, которые используют данные сайта;
  • Интеграция с внешними сервисами;
  • Расширение функциональности плагинов с помощью AJAX без перезагрузки страницы.

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

Чтобы добавить свой маршрут, нужно использовать функцию register_rest_route(). Обычно регистрацию делают в хуке rest_api_init. Рассмотрим пример создания плагина, который возвращает список задач.

add_action('rest_api_init', function () {
    register_rest_route('wpcontent/v1', '/tasks', array(
        'methods' => 'GET',
        'callback' => 'wpcontent_get_tasks',
    ));
});

function wpcontent_get_tasks(WP_REST_Request $request) {
    // Пример: возвращаем статичный список задач
    $tasks = array(
        array('id' => 1, 'title' => 'Сделать резервную копию'),
        array('id' => 2, 'title' => 'Обновить плагины'),
        array('id' => 3, 'title' => 'Проверить безопасность'),
    );
    return rest_ensure_response($tasks);
}

В этом примере мы создали маршрут /wpcontent/v1/tasks, при обращении к которому возвращается JSON с массивом задач.

Пояснение к коду

Вызов register_rest_route() принимает три параметра: пространство имён маршрута, путь и массив настроек. В массиве указываются методы HTTP, которые поддерживает маршрут, и функция-обработчик, которая возвращает данные.

Функция-обработчик получает объект WP_REST_Request, через который можно получить параметры запроса, заголовки, тело и пр.

Обработка POST-запросов и создание ресурсов через REST API

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

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

function wpcontent_create_task(WP_REST_Request $request) {
    $params = $request->get_json_params();
    if (empty($params['title'])) {
        return new WP_Error('no_title', 'Название задачи обязательно', array('status' => 400));
    }

    // Здесь можно сохранить задачу в базу, например, через кастомный тип записи или опцию
    // Для примера просто возвращаем переданные данные
    $new_task = array(
        'id' => rand(100,999),
        'title' => sanitize_text_field($params['title']),
    );

    return rest_ensure_response($new_task);
}

Обратите внимание на параметр permission_callback. Он отвечает за проверку прав доступа. В данном случае только пользователи с правом edit_posts смогут создавать задачи.

Примеры популярных плагинов, использующих REST API

Некоторые плагины активно используют REST API для расширения функциональности:

  • WPGraphQL — расширяет REST API возможностями GraphQL.
  • Advanced Custom Fields (ACF) — позволяет работать с дополнительными полями через REST API с помощью дополнений.
  • Contact Form 7 — поддерживает отправку форм через AJAX и REST API.

Изучение их кода поможет понять лучшие практики работы с REST API.

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

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

Также не стоит раскрывать в API конфиденциальные данные и использовать в ответах только необходимую информацию.

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

REST API позволяет принимать параметры через URL и тело запроса. Рассмотрим пример маршрута с параметрами для фильтрации списка задач.

add_action('rest_api_init', function () {
    register_rest_route('wpcontent/v1', '/tasks', array(
        'methods' => 'GET',
        'callback' => 'wpcontent_get_tasks_filtered',
        'args' => array(
            'status' => array(
                'required' => false,
                'validate_callback' => function($param) {
                    return in_array($param, array('new', 'completed'), true);
                },
            ),
        ),
    ));
});

function wpcontent_get_tasks_filtered(WP_REST_Request $request) {
    $status = $request->get_param('status');

    $tasks = array(
        array('id' => 1, 'title' => 'Сделать резервную копию', 'status' => 'completed'),
        array('id' => 2, 'title' => 'Обновить плагины', 'status' => 'new'),
        array('id' => 3, 'title' => 'Проверить безопасность', 'status' => 'new'),
    );

    if ($status) {
        $tasks = array_filter($tasks, function($task) use ($status) {
            return $task['status'] === $status;
        });
    }

    return rest_ensure_response(array_values($tasks));
}

В этом примере мы принимаем необязательный параметр status и фильтруем задачи по нему. Благодаря валидации параметров API становится надежнее и удобнее для клиентов.

Интеграция REST API с фронтендом на JavaScript

Для вызова REST API с фронтенда можно использовать стандартный fetch или библиотеки типа Axios. Пример получения списка задач:

fetch('/wp-json/wpcontent/v1/tasks')
    .then(response => response.json())
    .then(data => console.log(data))
    .catch(err => console.error('Ошибка:', err));

Для отправки POST-запроса с созданием новой задачи обязательно передавайте nonce для безопасности и заголовки:

fetch('/wp-json/wpcontent/v1/tasks', {
    method: 'POST',
    headers: {
        'Content-Type': 'application/json',
        'X-WP-Nonce': wpApiSettings.nonce
    },
    body: JSON.stringify({ title: 'Новая задача' })
})
.then(response => response.json())
.then(data => console.log(data))
.catch(err => console.error('Ошибка:', err));
<

Чтобы передать nonce, необходимо локализовать скрипт в PHP, например:

function wpcontent_enqueue_scripts() {
    wp_enqueue_script('wpcontent-script', plugin_dir_url(__FILE__) . 'script.js', array('jquery'), null, true);
    wp_localize_script('wpcontent-script', 'wpApiSettings', array(
        'nonce' => wp_create_nonce('wp_rest')
    ));
}
add_action('wp_enqueue_scripts', 'wpcontent_enqueue_scripts');

Заключение

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

Как изменить пути к медиафайлам в WordPress без потери функциональности
16.03.2026
Как удалить автозаголовки в WooCommerce без плагинов: практическое решение
09.06.2026
Автоматическое удаление старых версий медиафайлов в WordPress для оптимизации хранилища
11.12.2025
Как использовать WP Hooks для автоматического изменения атрибутов товара WooCommerce
12.05.2026
Как удалить meta generator в WordPress: надежные способы защиты сайта
26.11.2025