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

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

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

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

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

Кроме того, REST API позволяет легко интегрировать сторонние сервисы и создавать SPA (single-page applications) на базе WordPress.

Создание собственного REST API маршрута в плагине WordPress

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

add_action('rest_api_init', 'wplock_register_routes');
function wplock_register_routes() {
    register_rest_route('wplock/v1', '/recent-posts/', array(
        'methods' => 'GET',
        'callback' => 'wplock_get_recent_posts',
        'permission_callback' => '__return_true' // доступ открыт всем
    ));
}

function wplock_get_recent_posts(WP_REST_Request $request) {
    $args = array(
        'numberposts' => 5,
        'post_status' => 'publish'
    );
    $posts = wp_get_recent_posts($args);
    $data = array();
    foreach ($posts as $post) {
        $data[] = array(
            'id' => $post['ID'],
            'title' => $post['post_title'],
            'excerpt' => wp_trim_words($post['post_content'], 20),
            'date' => $post['post_date']
        );
    }
    return rest_ensure_response($data);
}

В этом примере мы создаём маршрут /wp-json/wplock/v1/recent-posts/, который возвращает JSON с пятью последними опубликованными постами. Обратите внимание на использование функции rest_ensure_response для корректного формирования ответа API.

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

REST API позволяет не только получать данные, но и создавать, обновлять или удалять их. Для демонстрации создадим endpoint, который будет принимать POST-запрос и создавать новую заметку (post типа 'post') с данными, переданными в JSON.

add_action('rest_api_init', 'wplock_register_post_route');
function wplock_register_post_route() {
    register_rest_route('wplock/v1', '/add-post/', array(
        'methods' => 'POST',
        'callback' => 'wplock_create_post',
        'permission_callback' => function () {
            return current_user_can('edit_posts'); // только для авторизованных с правами
        }
    ));
}

function wplock_create_post(WP_REST_Request $request) {
    $params = $request->get_json_params();
    if (empty($params['title']) || empty($params['content'])) {
        return new WP_Error('missing_data', 'Необходимо указать title и content', array('status' => 400));
    }

    $post_data = array(
        'post_title' => sanitize_text_field($params['title']),
        'post_content' => wp_kses_post($params['content']),
        'post_status' => 'draft',
        'post_author' => get_current_user_id(),
        'post_type' => 'post'
    );

    $post_id = wp_insert_post($post_data);

    if (is_wp_error($post_id)) {
        return new WP_Error('insert_failed', 'Ошибка при создании поста', array('status' => 500));
    }

    return rest_ensure_response(array('post_id' => $post_id, 'message' => 'Пост создан в статусе черновика'));
}

Здесь важно обеспечить безопасность: мы проверяем права пользователя через permission_callback. Также используем функции очистки данных sanitize_text_field и wp_kses_post для предотвращения XSS и других атак.

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

В реальных проектах часто нужно принимать дополнительные параметры в запросах и фильтровать результаты. Например, можно добавить параметр category_id для фильтрации постов по категории:

add_action('rest_api_init', function () {
    register_rest_route('wplock/v1', '/filtered-posts/', array(
        'methods' => 'GET',
        'callback' => 'wplock_get_filtered_posts',
        'args' => array(
            'category_id' => array(
                'required' => false,
                'validate_callback' => function ($param) {
                    return is_numeric($param);
                }
            ),
        ),
        'permission_callback' => '__return_true'
    ));
});

function wplock_get_filtered_posts(WP_REST_Request $request) {
    $category_id = $request->get_param('category_id');

    $args = array(
        'post_status' => 'publish',
        'numberposts' => 10,
    );

    if ($category_id) {
        $args['category'] = intval($category_id);
    }

    $posts = get_posts($args);
    $result = array();

    foreach ($posts as $post) {
        $result[] = array(
            'id' => $post->ID,
            'title' => $post->post_title,
            'date' => $post->post_date,
        );
    }

    return rest_ensure_response($result);
}

Опция 'args' позволяет задать правила валидации и обязательность параметров. Это помогает контролировать входные данные и исключать ошибки.

Популярные плагины для расширения возможностей REST API в WordPress

Существуют плагины, которые значительно упрощают работу с REST API или расширяют его функционал:

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

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

Рекомендации по безопасности при работе с REST API в WordPress

При разработке плагинов с REST API важно не забывать о безопасности. Вот основные рекомендации:

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

Безопасность — ключевой аспект при расширении функционала сайта через API.

Как удалить заблокированные и неактивные пользователи в WordPress
22.12.2025
Как изменить URL авторского архива в WordPress
13.02.2026
Как использовать REST API в WordPress для создания своего плагина
08.12.2025
Как удалить неиспользуемые шорткоды в WordPress: практическое руководство
29.12.2025
Как сделать автоподсказку в поиске WordPress
25.02.2026