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

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

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

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

Создание собственного endpoint позволяет:

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

Создание собственного REST API endpoint: основные шаги

Для создания собственного endpoint в WordPress используется функция register_rest_route(). Вы регистрируете новый маршрут, указываете метод запроса (GET, POST и др.), а также callback-функцию, которая будет обрабатывать запросы.

Пример базовой регистрации endpoint:

add_action('rest_api_init', function () {
    register_rest_route('wponline/v1', '/custom-data', array(
        'methods' => 'GET',
        'callback' => 'wponline_get_custom_data',
        'permission_callback' => '__return_true', // на время можно отключить проверку прав
    ));
});

function wponline_get_custom_data(WP_REST_Request $request) {
    return [
        'message' => 'Это пример собственного REST API endpoint в WordPress',
        'data' => [1, 2, 3]
    ];
}

В этом примере мы создали endpoint по адресу /wp-json/wponline/v1/custom-data, который возвращает простой массив данных.

Объяснение параметров register_rest_route

  • namespace — обычно указывается уникальный префикс для группировки endpoints, например, wponline/v1.
  • route — путь внутри namespace, здесь /custom-data.
  • methods — HTTP-методы, которые будут обрабатываться (GET, POST, PUT, DELETE).
  • callback — имя функции для обработки запроса.
  • permission_callback — функция проверки авторизации и прав доступа.

Добавление параметров запроса и их обработка

Часто нужно принимать параметры из URL или тела запроса. В WordPress REST API это реализуется через объект WP_REST_Request. Пример с параметром:

add_action('rest_api_init', function () {
    register_rest_route('wponline/v1', '/product/(?P<id>\d+)', array(
        'methods' => 'GET',
        'callback' => 'wponline_get_product_by_id',
        'permission_callback' => '__return_true',
    ));
});

function wponline_get_product_by_id(WP_REST_Request $request) {
    $id = $request->get_param('id');
    $product = get_post($id);
    if (!$product || $product->post_type !== 'product') {
        return new WP_Error('no_product', 'Продукт не найден', array('status' => 404));
    }
    return [
        'id' => $product->ID,
        'title' => $product->post_title,
        'content' => $product->post_content
    ];
}

В этом примере endpoint принимает числовой параметр id из URL, получает данные записи product и возвращает их в формате JSON. Если продукт не найден, возвращается ошибка с кодом 404.

Регистрация параметров и валидация

Можно добавить валидацию параметров с помощью аргумента args:

register_rest_route('wponline/v1', '/search', array(
    'methods' => 'GET',
    'callback' => 'wponline_search_posts',
    'args' => array(
        'term' => array(
            'required' => true,
            'validate_callback' => function($param) {
                return is_string($param) && strlen($param) > 2;
            }
        )
    ),
    'permission_callback' => '__return_true',
));

Это позволит не запускать обработчик, если параметр term не передан или слишком короткий.

Реализация POST-запроса для создания записи

REST API позволяет не только получать данные, но и создавать, обновлять и удалять записи. Ниже пример создания записи через POST-запрос:

add_action('rest_api_init', function () {
    register_rest_route('wponline/v1', '/create-post', array(
        'methods' => 'POST',
        'callback' => 'wponline_create_post',
        'permission_callback' => function () {
            return current_user_can('edit_posts');
        },
        'args' => array(
            'title' => array('required' => true),
            'content' => array('required' => true),
        ),
    ));
});

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

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

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

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

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

Использование плагина Clearfy Pro для расширения REST API

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

Например, Clearfy Pro позволяет легко отключать ненужные endpoints, что повышает безопасность сайта. Также он может помочь с настройкой CORS и кешированием ответов API.

Полезные советы по безопасности и производительности

Проверка прав доступа

Обязательно реализуйте permission_callback, чтобы ограничить доступ к чувствительным данным. Например, можно проверять авторизацию пользователя или использовать nonce.

Кэширование ответов

Если ваш endpoint возвращает данные, которые не меняются часто, стоит реализовать кэширование — с помощью Transients API или внешних систем кеширования. Это снизит нагрузку на сервер и ускорит отклик.

Обработка ошибок

Используйте класс WP_Error для возврата ошибок и информативных сообщений клиенту. Это поможет отлаживать приложения и информировать пользователя о проблемах.

Как тестировать собственный REST API endpoint

Для тестирования можно использовать инструменты:

  • Postman — удобный GUI клиент для отправки HTTP-запросов.
  • curl — команда в терминале, например:
    curl -X GET https://example.com/wp-json/wponline/v1/custom-data
  • Встроенный браузер — для GET-запросов достаточно перейти по URL.

При тестах проверяйте статусы HTTP-ответов, структуру данных и корректность обработки ошибок.

Итоги

Создание собственного REST API endpoint в WordPress — мощный инструмент для расширения функционала сайта и интеграции с внешними системами. Используя register_rest_route(), правильную обработку параметров, проверку прав и обработку ошибок, вы сможете создавать надёжные и быстрые API. Дополнительно стоит обратить внимание на оптимизацию и безопасность с помощью плагинов, например, Clearfy Pro.

Как создать автоматический импорт продукции в WooCommerce
09.04.2026
Как отключить Emoji в WordPress для ускорения сайта
07.12.2025
Как избежать проблем с переносом WordPress между серверами
03.12.2025
Автоматическое удаление старых записей в WordPress по дате публикации
03.02.2026
Как удалить старые вариации товаров в WooCommerce с помощью кода
05.05.2026