Как создать и использовать собственные REST API эндпоинты в WordPress

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

Что такое REST API в WordPress и зачем создавать свои эндпоинты

REST API — это архитектурный стиль, позволяющий работать с ресурсами сайта через HTTP-запросы (GET, POST, PUT, DELETE и другие). В WordPress стандартно доступны эндпоинты для постов, страниц, пользователей и т.д. Однако часто требуется реализовать уникальную логику, например, получить данные из нестандартных таблиц, отправить кастомные команды или выполнить операции, не поддерживаемые стандартным API.

Создание собственных REST API эндпоинтов позволяет:

  • Расширить возможности стандартного API;
  • Оптимизировать обмен данными с внешними приложениями;
  • Реализовать безопасный и удобный доступ к дополнительному функционалу сайта;
  • Интегрировать сложную бизнес-логику в API.

Регистрация собственного REST API эндпоинта в WordPress

Для регистрации своего маршрута нужно использовать хук rest_api_init и функцию register_rest_route. Ниже пример создания простого эндпоинта, который возвращает приветственное сообщение.

add_action('rest_api_init', function () {
    register_rest_route('wpreset/v1', '/hello', array(
        'methods' => 'GET',
        'callback' => 'wpreset_hello_endpoint',
    ));
});

function wpreset_hello_endpoint(WP_REST_Request $request) {
    return array('message' => 'Привет от wpreset.ru!');
}

Здесь:

  • wpreset/v1 — пространство имён и версия API;
  • /hello — маршрут;
  • methods — HTTP-метод (GET в данном случае);
  • callback — функция, вызываемая при обращении.

После добавления кода эндпоинт будет доступен по адресу https://ваш-сайт/wp-json/wpreset/v1/hello.

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

Очень часто необходимо принимать параметры от клиента. Рассмотрим пример, когда в GET-запросе передаётся имя пользователя, и функция возвращает персональное приветствие.

add_action('rest_api_init', function () {
    register_rest_route('wpreset/v1', '/greet', array(
        'methods' => 'GET',
        'callback' => 'wpreset_greet_user',
        'args' => array(
            'name' => array(
                'required' => true,
                'validate_callback' => function($param, $request, $key) {
                    return is_string($param) && !empty($param);
                }
            ),
        ),
    ));
});

function wpreset_greet_user(WP_REST_Request $request) {
    $name = sanitize_text_field($request->get_param('name'));
    return array('message' => "Привет, $name! Добро пожаловать на wpreset.ru");
}

Здесь мы определили обязательный параметр name и функцию валидации, которая проверяет, что параметр — непустая строка. В функции-обработчике параметр очищается и возвращается в ответе.

Создание кастомного эндпоинта для работы с пользовательскими типами записей

Предположим, на сайте есть кастомный тип записи book и нужно получить список книг с возможностью фильтрации по автору.

add_action('rest_api_init', function () {
    register_rest_route('wpreset/v1', '/books', array(
        'methods' => 'GET',
        'callback' => 'wpreset_get_books',
        'args' => array(
            'author' => array(
                'required' => false,
                'validate_callback' => 'is_string',
            ),
        ),
    ));
});

function wpreset_get_books(WP_REST_Request $request) {
    $author = sanitize_text_field($request->get_param('author'));

    $args = array(
        'post_type' => 'book',
        'posts_per_page' => 10,
    );

    if ($author) {
        $args['meta_query'] = array(
            array(
                'key' => 'book_author',
                'value' => $author,
                'compare' => 'LIKE',
            ),
        );
    }

    $query = new WP_Query($args);
    $books = array();

    foreach ($query->posts as $post) {
        $books[] = array(
            'id' => $post->ID,
            'title' => $post->post_title,
            'author' => get_post_meta($post->ID, 'book_author', true),
        );
    }

    return $books;
}

В этом примере мы получаем параметр author и формируем WP_Query с фильтром. В ответ возвращается массив книг с ID, заголовком и автором.

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

Важный аспект — ограничение доступа к своим эндпоинтам. Если данные не предназначены для публичного просмотра, нужно проверять права пользователя или использовать nonce.

Пример проверки прав пользователя с ролью администратора:

add_action('rest_api_init', function () {
    register_rest_route('wpreset/v1', '/secret-data', array(
        'methods' => 'GET',
        'callback' => 'wpreset_secret_data',
        'permission_callback' => function () {
            return current_user_can('manage_options');
        },
    ));
});

function wpreset_secret_data(WP_REST_Request $request) {
    return array('secret' => 'Это закрытая информация для администраторов');
}

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

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

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

  • Clearfy Pro — помогает оптимизировать безопасность и работу API;
  • WPCommunity — расширяет возможности работы с пользователями и API;
  • WPReset — удобен для восстановления и тестирования API функционала.

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

Для создания или обновления данных через API используют метод POST (или PUT). Важно правильно обрабатывать входящие данные, валидировать и обеспечивать безопасность.

Пример создания новой записи типа book через REST API:

add_action('rest_api_init', function () {
    register_rest_route('wpreset/v1', '/books', array(
        'methods' => 'POST',
        'callback' => 'wpreset_create_book',
        'permission_callback' => function () {
            return current_user_can('edit_posts');
        },
        'args' => array(
            'title' => array('required' => true),
            'author' => array('required' => true),
        ),
    ));
});

function wpreset_create_book(WP_REST_Request $request) {
    $title = sanitize_text_field($request->get_param('title'));
    $author = sanitize_text_field($request->get_param('author'));

    $post_id = wp_insert_post(array(
        'post_title' => $title,
        'post_type' => 'book',
        'post_status' => 'publish',
    ));

    if (is_wp_error($post_id)) {
        return new WP_Error('cant-create', 'Ошибка создания книги', array('status' => 500));
    }

    update_post_meta($post_id, 'book_author', $author);

    return array('success' => true, 'book_id' => $post_id);
}

Такое расширение позволяет интегрировать WordPress с внешними системами, мобильными приложениями или создавать собственные панели управления.

Отладка и тестирование собственных REST API эндпоинтов

Для тестирования удобны инструменты Postman, Insomnia или даже встроенный браузер для GET-запросов. Важно проверять корректность ответов, обработку ошибок и права доступа.

Рекомендуется использовать WP_DEBUG и логи для отладки, а также проверять, что все пользовательские функции имеют уникальные префиксы (например, wpreset_), чтобы избежать конфликтов с другими плагинами.

Выводы и рекомендации

Создание собственных REST API эндпоинтов в WordPress — мощный инструмент для расширения возможностей сайта. Соблюдайте следующие рекомендации:

  • Используйте уникальные пространства имён и префиксы функций для безопасности и удобства поддержки;
  • Обязательно валидируйте и очищайте входящие данные;
  • Реализуйте проверку прав доступа на уровне эндпоинтов;
  • Тестируйте API на разных сценариях;
  • Используйте возможности плагинов из WPShop для оптимизации и расширения функционала.

Таким образом, вы сможете создавать гибкие, расширяемые и безопасные решения для любых задач, связанных с интеграцией и автоматизацией в WordPress.

Как изменить структуру ссылок в WordPress без потери SEO
17.12.2025
Как удалить или отключить плагин WordPress без доступа к админке
13.01.2026
Как очистить базу данных WordPress от мусора и удалённых остатков
06.03.2026
Как избежать конфликтов между плагинами WordPress: практические советы и примеры
16.02.2026
Как создать и использовать собственные REST API эндпоинты в WordPress
03.04.2026