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

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

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

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

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

  • Интегрировать WordPress с внешними сервисами и приложениями.
  • Создавать одностраничные приложения (SPA) на React, Vue или Angular с динамическим контентом.
  • Безопасно отдавать только нужные данные, фильтруя и форматируя их по своему усмотрению.
  • Упрощать взаимодействие с мобильными приложениями.

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

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

Для создания собственного эндпоинта достаточно использовать функцию register_rest_route. Ниже представлен пример кода, который регистрирует новый маршрут /wp-blog/v1/custom-data и возвращает простой JSON с данными:

add_action('rest_api_init', function() {
    register_rest_route('wp-blog/v1', '/custom-data', array(
        'methods' => 'GET',
        'callback' => 'wpblog_get_custom_data',
        'permission_callback' => '__return_true'
    ));
});

function wpblog_get_custom_data(WP_REST_Request $request) {
    $data = array(
        'message' => 'Привет от wp-blog.ru!',
        'time' => current_time('mysql')
    );
    return rest_ensure_response($data);
}

Разберём детали:

  • rest_api_init — хук, в котором регистрируются все свои REST маршруты.
  • register_rest_route — функция регистрации маршрута. В первом параметре указываем namespace (лучше использовать префикс вашего сайта или плагина), во втором — путь маршрута, в третьем — массив параметров.
  • methods — HTTP метод. В нашем случае GET.
  • callback — функция, которая вызывается при обращении к данному маршруту.
  • permission_callback — функция проверки прав доступа. Тут мы возвращаем всегда true, разрешая доступ всем, но для защиты данных лучше реализовать проверку.

Теперь, если перейти по адресу https://ваш-сайт.ru/wp-json/wp-blog/v1/custom-data, вы получите JSON с сообщением и текущим временем.

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

Часто нужно получать параметры из URL или тела запроса. Например, добавим параметр name, чтобы возвращать персонализированное приветствие:

add_action('rest_api_init', function() {
    register_rest_route('wp-blog/v1', '/greet', array(
        'methods' => 'GET',
        'callback' => 'wpblog_greet_user',
        'args' => array(
            'name' => array(
                'required' => false,
                'validate_callback' => function($param, $request, $key) {
                    return is_string($param);
                }
            )
        ),
        'permission_callback' => '__return_true'
    ));
});

function wpblog_greet_user(WP_REST_Request $request) {
    $name = $request->get_param('name');
    if (!$name) {
        $name = 'Гость';
    }
    return rest_ensure_response(array('greeting' => 'Привет, ' . sanitize_text_field($name) . '!'));
}

В этом примере:

  • Мы добавили параметр name, который можно передавать в запросе, например: ?name=Иван.
  • Определили функцию валидации, чтобы параметр был строкой.
  • В ответе выводим персональное приветствие с безопасной очисткой данных.

Таким образом можно легко расширять функционал своих эндпоинтов.

Пример: получение кастомных записей с фильтрацией и пагинацией

Частая задача — создавать API для работы с кастомными типами записей (Custom Post Types). Допустим, у вас есть CPT book, и нужно возвращать их список с пагинацией.

add_action('rest_api_init', function() {
    register_rest_route('wp-blog/v1', '/books', array(
        'methods' => 'GET',
        'callback' => 'wpblog_get_books',
        'args' => array(
            'page' => array(
                'default' => 1,
                'validate_callback' => 'is_numeric'
            ),
            'per_page' => array(
                'default' => 5,
                'validate_callback' => 'is_numeric'
            )
        ),
        'permission_callback' => '__return_true'
    ));
});

function wpblog_get_books(WP_REST_Request $request) {
    $page = max(1, (int)$request->get_param('page'));
    $per_page = min(20, max(1, (int)$request->get_param('per_page')));

    $args = array(
        'post_type' => 'book',
        'posts_per_page' => $per_page,
        'paged' => $page
    );

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

    if ($query->have_posts()) {
        while ($query->have_posts()) {
            $query->the_post();
            $books[] = array(
                'id' => get_the_ID(),
                'title' => get_the_title(),
                'excerpt' => get_the_excerpt(),
                'link' => get_permalink()
            );
        }
    }
    wp_reset_postdata();

    return rest_ensure_response(array(
        'page' => $page,
        'per_page' => $per_page,
        'total_books' => $query->found_posts,
        'books' => $books
    ));
}

Этот пример показывает, как получить список книг с параметрами page и per_page. Такой эндпоинт удобно использовать для построения интерфейсов с постраничным выводом.

Безопасность и права доступа к кастомным эндпоинтам

Очень важно контролировать, кто может обращаться к вашим REST API маршрутам. В примерах выше стоит 'permission_callback' => '__return_true', что разрешает всем доступ. В реальных проектах рекомендуем реализовывать проверку, например:

  • Проверка авторизации пользователя (is_user_logged_in()).
  • Проверка прав на определённые действия (current_user_can('edit_posts')).
  • Использование nonce или токенов для защиты от CSRF.

Пример проверки прав:

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

register_rest_route('wp-blog/v1', '/secure-data', array(
    'methods' => 'GET',
    'callback' => 'wpblog_get_secure_data',
    'permission_callback' => 'wpblog_permission_check'
));

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

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

  • Clearfy Pro — оптимизация и расширение возможностей WordPress, включая REST API.
  • WPRemark — плагин для комментариев с поддержкой REST API.
  • WPStories — создание историй с интеграцией через API.

Эти решения помогут расширить функционал сайта и упростить взаимодействие с внешними системами.

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
Автоматическое удаление проблемных изображений в WordPress: решение для оптимизации сайта
22.02.2026
WooCommerce: автоматическое удаление неактивных заказов с примерами кода
02.06.2026
Как использовать хук wp_blog для изменения заголовка страницы в WordPress
13.12.2025
Как добавить настройки в WordPress плагин: подробное руководство
10.11.2025
Как использовать REST API для создания уникальных эндпоинтов в WordPress
31.01.2026
×
Делай сайт лучше!!

-20% на премиум темы и плагины

Использовать скидку ⋙