Как использовать REST API для создания кастомных эндпоинтов в WordPress

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

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

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

Создание кастомных эндпоинтов позволяет:

  • Обеспечить обмен данными между WordPress и внешними сервисами;
  • Реализовать нестандартную логику обработки запросов;
  • Создавать API для мобильных приложений или SPA (Single Page Application);
  • Обеспечить безопасность и контроль доступа к определённой информации.

Без кастомных эндпоинтов иногда приходится создавать отдельные скрипты или использовать устаревшие подходы, что небезопасно и неудобно.

Как зарегистрировать кастомный REST API эндпоинт в WordPress

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

add_action('rest_api_init', 'wpshab_register_custom_endpoint');
function wpshab_register_custom_endpoint() {
    register_rest_route('wpshab/v1', '/latest-posts/', array(
        'methods' => 'GET',
        'callback' => 'wpshab_get_latest_posts',
        'permission_callback' => '__return_true', // Для публичного доступа
    ));
}

function wpshab_get_latest_posts(WP_REST_Request $request) {
    $category = $request->get_param('category');
    $args = array(
        'posts_per_page' => 5,
        'post_status' => 'publish',
    );
    if ($category) {
        $args['category_name'] = sanitize_text_field($category);
    }
    $posts = get_posts($args);
    $data = array();
    foreach ($posts as $post) {
        $data[] = array(
            'id' => $post->ID,
            'title' => get_the_title($post),
            'link' => get_permalink($post),
            'date' => get_the_date('', $post),
        );
    }
    return rest_ensure_response($data);
}

В этом коде мы регистрируем маршрут /wp-json/wpshab/v1/latest-posts/?category=novosti, который возвращает последние 5 постов из категории "novosti". Параметр category необязательный, если его не передавать — вернутся последние 5 постов без фильтрации.

Обработка параметров и проверка прав доступа

Очень важно грамотно работать с параметрами запроса и безопасностью. В примере выше мы использовали sanitize_text_field для очистки параметра category, чтобы предотвратить XSS и другие атаки.

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

'permission_callback' => function() {
    return current_user_can('read');
}

или более конкретно, если нужен админский доступ:

'permission_callback' => function() {
    return current_user_can('manage_options');
}

Пример создания POST эндпоинта для добавления комментариев

Рассмотрим пример эндпоинта, который позволит добавлять комментарии к постам через REST API. Это может быть полезно для мобильных приложений или при интеграции с внешними фронтендами.

add_action('rest_api_init', 'wpshab_register_comment_endpoint');
function wpshab_register_comment_endpoint() {
    register_rest_route('wpshab/v1', '/add-comment/', array(
        'methods' => 'POST',
        'callback' => 'wpshab_add_comment',
        'permission_callback' => function() {
            return is_user_logged_in(); // Только для авторизованных
        },
        'args' => array(
            'post_id' => array(
                'required' => true,
                'validate_callback' => 'is_numeric',
            ),
            'comment_content' => array(
                'required' => true,
                'sanitize_callback' => 'sanitize_textarea_field',
            ),
        ),
    ));
}

function wpshab_add_comment(WP_REST_Request $request) {
    $post_id = $request->get_param('post_id');
    $content = $request->get_param('comment_content');
    $user = wp_get_current_user();

    if (!get_post($post_id)) {
        return new WP_Error('invalid_post', 'Пост не найден', array('status' => 404));
    }

    $commentdata = array(
        'comment_post_ID' => $post_id,
        'comment_author' => $user->display_name,
        'comment_author_email' => $user->user_email,
        'comment_content' => $content,
        'user_id' => $user->ID,
        'comment_approved' => 1,
    );

    $comment_id = wp_new_comment($commentdata);
    if (!$comment_id) {
        return new WP_Error('comment_failed', 'Не удалось добавить комментарий', array('status' => 500));
    }

    return rest_ensure_response(array('comment_id' => $comment_id, 'message' => 'Комментарий добавлен успешно'));
}

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

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

Хотя WordPress изначально поддерживает REST API, существуют плагины, упрощающие работу или расширяющие возможности:

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

Использование таких плагинов ускорит разработку и упростит интеграцию.

Заключение по созданию кастомных REST API эндпоинтов

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

Как автоматизировать управление ролями пользователей в WordPress
08.01.2026
Автоматизация обработки форм в WordPress с WPRemark
24.12.2025
Как создать автоматические ответы в WordPress
14.11.2025
Как использовать хуки в WordPress для расширения функциональности
24.11.2025
Как избежать проблемы с кэшированием в WordPress
12.01.2026