Как создать собственный REST API в WordPress

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

Что такое REST API в WordPress и зачем создавать свои маршруты

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

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

Основные шаги создания собственного REST API в WordPress

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

Далее разберем каждый из этих шагов подробно и на примерах.

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

Для начала регистрации маршрута нужно использовать хук rest_api_init, который вызывается при инициализации REST API. В нем вызывается функция register_rest_route(), куда передается пространство имён (namespace), путь маршрута и массив с параметрами.

add_action('rest_api_init', 'wp24_register_custom_route');

function wp24_register_custom_route() {
    register_rest_route('wp24/v1', '/get-data/', [
        'methods' => 'GET',
        'callback' => 'wp24_get_data_callback',
        'permission_callback' => '__return_true' // открытый доступ
    ]);
}

Здесь мы регистрируем маршрут /wp-json/wp24/v1/get-data/, который будет обрабатывать GET-запросы и вызывать функцию wp24_get_data_callback.

Пример обработчика запроса

Обработчик должен принимать объект WP_REST_Request и возвращать данные. Например:

function wp24_get_data_callback( WP_REST_Request $request ) {
    $data = [
        'message' => 'Привет от WP24 REST API!',
        'time' => current_time('mysql')
    ];
    return rest_ensure_response($data);
}

Мы возвращаем простой массив с сообщением и текущим временем. WordPress автоматически преобразует его в JSON.

Обработка параметров запроса и валидация

Часто нужно принимать параметры из URL или тела запроса. Их можно получить через методы объекта WP_REST_Request:

  • $request->get_param('param_name') — получить параметр из любого источника.
  • $request->get_query_params() — получить все GET-параметры.
  • $request->get_body_params() — получить параметры из тела POST-запроса.

Рассмотрим пример маршрута с параметром id:

add_action('rest_api_init', 'wp24_register_post_route');

function wp24_register_post_route() {
    register_rest_route('wp24/v1', '/post/(?P<id>\d+)', [
        'methods' => 'GET',
        'callback' => 'wp24_get_post_by_id',
        'permission_callback' => '__return_true',
        'args' => [
            'id' => [
                'validate_callback' => function($param) {
                    return is_numeric($param);
                }
            ]
        ]
    ]);
}

function wp24_get_post_by_id(WP_REST_Request $request) {
    $id = (int) $request->get_param('id');
    $post = get_post($id);
    if (empty($post)) {
        return new WP_Error('no_post', 'Пост не найден', ['status' => 404]);
    }
    return rest_ensure_response([ 'id' => $post->ID, 'title' => $post->post_title ]);
}

Здесь маршрут принимает числовой параметр id, валидирует его, затем возвращает заголовок поста по ID или ошибку 404.

Настройка прав доступа и безопасность REST API

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

Пример проверки, что пользователь авторизован и имеет возможность редактировать посты:

function wp24_permission_check(WP_REST_Request $request) {
    return current_user_can('edit_posts');
}

add_action('rest_api_init', function() {
    register_rest_route('wp24/v1', '/update-post/(?P<id>\d+)', [
        'methods' => 'POST',
        'callback' => 'wp24_update_post_callback',
        'permission_callback' => 'wp24_permission_check'
    ]);
});

Если пользователь не авторизован или нет нужных прав, WordPress вернет ошибку 401 или 403.

Пример: Создаем плагин с собственным REST API для управления заметками

Представим, что у нас есть кастомная таблица wp24_notes для хранения заметок. Мы хотим создать REST API для создания, получения и удаления заметок.

1. Создание таблицы (в функции активации плагина)

function wp24_create_notes_table() {
    global $wpdb;
    $table_name = $wpdb->prefix . 'notes';
    $charset_collate = $wpdb->get_charset_collate();

    $sql = "CREATE TABLE $table_name (
      id mediumint(9) NOT NULL AUTO_INCREMENT,
      title text NOT NULL,
      content longtext NOT NULL,
      PRIMARY KEY  (id)
    ) $charset_collate;";

    require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
    dbDelta( $sql );
}
register_activation_hook(__FILE__, 'wp24_create_notes_table');

2. Регистрация REST API маршрутов

add_action('rest_api_init', function() {
    register_rest_route('wp24/v1', '/notes', [
        'methods' => 'GET',
        'callback' => 'wp24_get_notes',
        'permission_callback' => '__return_true'
    ]);

    register_rest_route('wp24/v1', '/notes', [
        'methods' => 'POST',
        'callback' => 'wp24_create_note',
        'permission_callback' => 'wp24_permission_check'
    ]);

    register_rest_route('wp24/v1', '/notes/(?P<id>\d+)', [
        'methods' => 'DELETE',
        'callback' => 'wp24_delete_note',
        'permission_callback' => 'wp24_permission_check'
    ]);
});

3. Обработчики запросов

function wp24_get_notes() {
    global $wpdb;
    $table = $wpdb->prefix . 'notes';
    $results = $wpdb->get_results("SELECT * FROM $table", ARRAY_A);
    return rest_ensure_response($results);
}

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

    if (empty($title) || empty($content)) {
        return new WP_Error('empty_fields', 'Заголовок и содержимое обязательны', ['status' => 422]);
    }

    $table = $wpdb->prefix . 'notes';
    $wpdb->insert($table, [
        'title' => $title,
        'content' => $content
    ]);

    return rest_ensure_response(['id' => $wpdb->insert_id, 'title' => $title, 'content' => $content]);
}

function wp24_delete_note(WP_REST_Request $request) {
    global $wpdb;
    $id = (int) $request->get_param('id');
    $table = $wpdb->prefix . 'notes';

    $deleted = $wpdb->delete($table, ['id' => $id]);
    if (!$deleted) {
        return new WP_Error('not_deleted', 'Не удалось удалить заметку', ['status' => 500]);
    }

    return rest_ensure_response(['deleted_id' => $id]);
}

function wp24_permission_check() {
    return current_user_can('edit_posts');
}

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

Если создавать свой REST API не хочется, можно использовать готовые плагины, которые расширяют стандартный функционал:

  • WP REST API Controller — позволяет настраивать видимость полей постов и пользователей в API без кода.
  • Advanced Custom Fields to REST API — добавляет поля ACF к ответам REST API.
  • REST API Toolbox — расширяет возможности настройки эндпоинтов и безопасности.

Эти плагины помогут ускорить разработку и гибко настраивать REST API без глубоких знаний PHP.

Заключение по созданию собственного REST API в WordPress

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

Оптимизация загрузки изображений в WordPress: практические методы и примеры
25.11.2025
Как создать простой шорткод в WordPress с применением WP24
13.11.2025
Автоматический импорт продуктов из Excel в WordPress
06.12.2025
Как создать собственный REST API в WordPress
10.11.2025
Как отладить и решить проблемы с переадресацией в WordPress
06.11.2025