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

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

Что такое WP REST API и зачем использовать его в плагинах WordPress

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

Использование REST API в плагинах позволяет:

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

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

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

Для начала создадим простой плагин, который регистрирует свой REST API маршрут и возвращает список последних 5 записей.

Создайте файл wptemp-simple-rest.php в папке wp-content/plugins/wptemp-simple-rest с таким содержимым:

<?php
/**
 * Plugin Name: WPTEMP Simple REST API
 * Description: Пример плагина с собственным REST API эндпоинтом
 * Version: 1.0
 * Author: WPTEMP
 */

add_action('rest_api_init', 'wptemp_restapi_register_routes');

function wptemp_restapi_register_routes() {
    register_rest_route('wptemp/v1', '/latest-posts', [
        'methods' => 'GET',
        'callback' => 'wptemp_restapi_get_latest_posts',
        'permission_callback' => '__return_true', // Открытый маршрут
    ]);
}

function wptemp_restapi_get_latest_posts() {
    $args = [
        'numberposts' => 5,
        'post_status' => 'publish',
    ];
    $posts = get_posts($args);
    $data = [];
    foreach ($posts as $post) {
        $data[] = [
            'id' => $post->ID,
            'title' => get_the_title($post->ID),
            'link' => get_permalink($post->ID),
        ];
    }
    return rest_ensure_response($data);
}

Здесь мы регистрируем маршрут /wp-json/wptemp/v1/latest-posts, который возвращает JSON с последними пятью опубликованными постами. Параметр permission_callback установлен в __return_true, чтобы сделать маршрут публичным. В продакшене нужно подумать о безопасности.

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

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

add_action('rest_api_init', function () {
    register_rest_route('wptemp/v1', '/create-post', [
        'methods' => 'POST',
        'callback' => 'wptemp_restapi_create_post',
        '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 wptemp_restapi_create_post(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' => 'pending', // Можно менять на publish
        'post_type' => 'post',
    ]);

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

    return rest_ensure_response(['post_id' => $post_id, 'message' => 'Запись успешно создана']);
}

Здесь мы проверяем, что пользователь имеет право редактировать записи (edit_posts), иначе запрос вернёт 403 ошибку. Также используем sanitize_callback для безопасности данных.

Использование плагина Clearfy Pro для оптимизации REST API

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

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

Практические советы по безопасности REST API в плагинах

Несмотря на удобство, REST API может стать точкой входа для злоумышленников. Вот несколько рекомендаций:

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

Отладка и тестирование REST API маршрутов

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

  • Postman — мощный клиент для отправки HTTP-запросов.
  • cURL — командная утилита в терминале.
  • Browser REST clients — расширения для браузера.

Например, запрос последних постов можно сделать так:

curl https://ваш-сайт.ru/wp-json/wptemp/v1/latest-posts

Для POST-запроса с созданием записи:

curl -X POST https://ваш-сайт.ru/wp-json/wptemp/v1/create-post \
-H 'Content-Type: application/json' \
-d '{"title":"Тестовый заголовок","content":"Содержимое записи"}' \
-u user:password

Где user:password — данные авторизации пользователя с правами на редактирование.

Выводы и возможности расширения

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

Далее можно усложнить плагин, добавив поддержку пользовательских типов записей, метаданных, фильтров и пагинации, а также использовать встроенные возможности WP-CLI для автоматизации.

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

Как исправить ошибку 'wp_temp' при работе с временными таблицами в WordPress
29.12.2025
Как создать собственный виджет WordPress: практическое руководство
15.11.2025
Как добавить адаптивные изображения в WordPress для ускорения сайта
20.11.2025
Как удалить и оптимизировать базу данных WooCommerce без плагинов
04.05.2026
Как избежать конфликтов между плагинами в WordPress
12.03.2026