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

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

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

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

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

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

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

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

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

add_action('rest_api_init', 'wp_course_register_custom_endpoint');
function wp_course_register_custom_endpoint() {
    register_rest_route('wp-course/v1', '/latest-articles/', array(
        'methods' => 'GET',
        'callback' => 'wp_course_get_latest_articles',
        'permission_callback' => '__return_true',
    ));
}

function wp_course_get_latest_articles() {
    $args = array(
        'post_type' => 'wp_course_article',
        'posts_per_page' => 5,
        'post_status' => 'publish',
    );
    $query = new WP_Query($args);
    $articles = array();

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

    return rest_ensure_response($articles);
}

После добавления этого кода в файл плагина или темы, новый эндпоинт будет доступен по адресу https://ваш-сайт/wp-json/wp-course/v1/latest-articles/. Запрос GET вернет JSON с последними записями.

Разбор кода и параметры register_rest_route

Функция register_rest_route принимает три аргумента:

  • пространство имён: здесь wp-course/v1 — версия API и уникальный префикс для сайта;
  • маршрут: путь после namespace, например /latest-articles/;
  • массив аргументов: методы (GET, POST и т.д.), callback-функция, проверка прав доступа.

Важно всегда добавлять permission_callback, даже если он просто возвращает true, чтобы WordPress не блокировал вызов по соображениям безопасности.

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

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

add_action('rest_api_init', 'wp_course_register_post_endpoint');
function wp_course_register_post_endpoint() {
    register_rest_route('wp-course/v1', '/add-article/', array(
        'methods' => 'POST',
        'callback' => 'wp_course_add_article',
        'permission_callback' => 'wp_course_permission_check',
        'args' => array(
            'title' => array(
                'required' => true,
                'type' => 'string',
            ),
            'content' => array(
                'required' => true,
                'type' => 'string',
            ),
        ),
    ));
}

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

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

    $new_post = array(
        'post_title' => $title,
        'post_content' => $content,
        'post_status' => 'publish',
        'post_type' => 'wp_course_article',
    );

    $post_id = wp_insert_post($new_post);

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

    return rest_ensure_response(array('message' => 'Статья успешно добавлена', 'post_id' => $post_id));
}

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

Плагины для расширения возможностей WordPress REST API

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

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

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

Пример интеграции ACF с кастомным эндпоинтом

Если у вас есть произвольные поля ACF, вы можете добавить их в ответ кастомного эндпоинта следующим образом:

function wp_course_get_latest_articles() {
    $args = array(
        'post_type' => 'wp_course_article',
        'posts_per_page' => 5,
        'post_status' => 'publish',
    );
    $query = new WP_Query($args);
    $articles = array();

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

    return rest_ensure_response($articles);
}

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

Безопасность и оптимизация кастомных REST API эндпоинтов

При разработке собственного API важно учитывать несколько ключевых аспектов безопасности:

  • Проверка прав доступа — используйте permission_callback, чтобы ограничить доступ к приватным данным и операциям;
  • Санитизация входных данных — обязательно очищайте и валидируйте все параметры запросов;
  • Логирование ошибок — добавляйте обработку и логирование ошибок для упрощения отладки;
  • Ограничение частоты запросов — можно реализовать throttling, чтобы защитить сервер от перегрузок.

Кроме того, старайтесь минимизировать объем передаваемых данных, чтобы не перегружать сеть и клиентское приложение.

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

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

⭐⭐⭐⭐⭐
Как создать свой шорткод в WordPress: практическое руководство с примерами
10.11.2025
Как создать свой плагин WordPress с нуля: пошаговое руководство для разработчиков
06.11.2025
Как разрешить использовать PHP в шорткодах WordPress: практическое руководство
06.12.2025
Как использовать REST API в WordPress для создания кастомных эндпоинтов
21.11.2025
Как создать уникальный виджет в WordPress с подключением AJAX
29.11.2025
×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее