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

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

Почему стоит создавать собственные REST API эндпоинты в WordPress

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

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

  • Оптимизировать работу фронтенда, получая только необходимые данные в одном запросе.
  • Интегрировать сайт с мобильными приложениями или внешними сервисами.
  • Добавлять бизнес-логику и проверку прав доступа на уровне API.

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

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

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

add_action('rest_api_init', 'wparticles_register_hello_endpoint');
function wparticles_register_hello_endpoint() {
    register_rest_route('wparticles/v1', '/hello', array(
        'methods' => 'GET',
        'callback' => 'wparticles_hello_callback',
        'permission_callback' => '__return_true',
    ));
}

function wparticles_hello_callback(WP_REST_Request $request) {
    return array('message' => 'Привет от WParticles!');
}

В этом примере мы создали эндпоинт /wp-json/wparticles/v1/hello, который возвращает JSON с сообщением. Обратите внимание на параметр permission_callback — он отвечает за проверку прав доступа к эндпоинту. Сейчас стоит __return_true, то есть эндпоинт доступен всем.

Такой подход — основа для создания более сложных API.

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

Часто нужно передавать параметры в API и валидировать их. Рассмотрим пример, когда эндпоинт принимает параметр post_id и возвращает заголовок и содержимое записи.

add_action('rest_api_init', 'wparticles_register_post_info_endpoint');
function wparticles_register_post_info_endpoint() {
    register_rest_route('wparticles/v1', '/post-info', array(
        'methods' => 'GET',
        'callback' => 'wparticles_post_info_callback',
        'permission_callback' => function() {
            return current_user_can('read');
        },
        'args' => array(
            'post_id' => array(
                'required' => true,
                'validate_callback' => function($param, $request, $key) {
                    return is_numeric($param) && $param > 0;
                }
            )
        ),
    ));
}

function wparticles_post_info_callback(WP_REST_Request $request) {
    $post_id = (int) $request->get_param('post_id');
    $post = get_post($post_id);
    if (!$post) {
        return new WP_Error('no_post', 'Пост не найден', array('status' => 404));
    }
    return array(
        'title' => get_the_title($post),
        'content' => apply_filters('the_content', $post->post_content),
    );
}

Здесь мы добавили аргумент post_id, который обязателен и должен быть положительным числом. В permission_callback ограничили доступ только для авторизованных пользователей с правом read.

Такой механизм позволяет защитить данные и избежать ошибок при получении некорректных параметров.

Создание POST-запроса для добавления данных через REST API

Переходим к более сложному примеру — созданию записи через POST-запрос в кастомом эндпоинте. Рассмотрим, как принять данные, проверить их и создать запись типа «продукт».

add_action('rest_api_init', 'wparticles_register_create_product_endpoint');
function wparticles_register_create_product_endpoint() {
    register_rest_route('wparticles/v1', '/create-product', array(
        'methods' => 'POST',
        'callback' => 'wparticles_create_product_callback',
        'permission_callback' => function() {
            return current_user_can('edit_posts');
        },
        'args' => array(
            'title' => array(
                'required' => true,
                'validate_callback' => function($param) {
                    return is_string($param) && !empty($param);
                }
            ),
            'price' => array(
                'required' => true,
                'validate_callback' => function($param) {
                    return is_numeric($param) && $param >= 0;
                }
            ),
        ),
    ));
}

function wparticles_create_product_callback(WP_REST_Request $request) {
    $title = sanitize_text_field($request->get_param('title'));
    $price = floatval($request->get_param('price'));

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

    if (is_wp_error($post_id)) {
        return new WP_Error('cannot_create', 'Не удалось создать продукт', array('status' => 500));
    }

    update_post_meta($post_id, 'price', $price);

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

Обратите внимание, что мы проверяем права пользователя и валидируем входные данные. Если всё успешно, создаём запись и сохраняем цену в метаполе.

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

Создавая свои REST API, важно помнить о безопасности и производительности:

  • Проверяйте права доступа: всегда используйте permission_callback для ограничения доступа к эндпоинтам.
  • Валидация и санитизация: проверяйте и очищайте все данные, поступающие от клиента, чтобы избежать SQL-инъекций и XSS-атак.
  • Кэшируйте часто запрашиваемые данные: чтобы снизить нагрузку на сервер, используйте transient API или внешние кэширующие решения.
  • Обрабатывайте ошибки корректно: возвращайте понятные сообщения об ошибках и правильные HTTP-коды.

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

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

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

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

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

Итоговые рекомендации для разработчиков

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

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

Как сделать динамический список постов с пагинацией на AJAX в WordPress
05.04.2026
Как настроить автоприсвоение категорий товарам в WooCommerce по мета-данным
21.05.2026
Как добавить собственные шорткоды в WordPress
22.11.2025
Как использовать WPCommunity для создания форума на WordPress
24.01.2026
Отложенная загрузка картинок (lazy load) в WordPress без плагинов
04.01.2026

Ниже мы подобрали самые актуальные материалы по Вордпресс