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

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

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

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

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

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

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

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

add_action('rest_api_init', 'wpacademy_register_popular_posts_endpoint');
function wpacademy_register_popular_posts_endpoint() {
    register_rest_route('wpacademy/v1', '/popular-posts/', array(
        'methods' => 'GET',
        'callback' => 'wpacademy_get_popular_posts',
        'permission_callback' => '__return_true',
    ));
}

function wpacademy_get_popular_posts() {
    $args = array(
        'posts_per_page' => 5,
        'meta_key' => 'post_views_count',
        'orderby' => 'meta_value_num',
        'order' => 'DESC',
        'post_status' => 'publish',
    );
    $query = new WP_Query($args);
    $posts = array();
    if ($query->have_posts()) {
        while ($query->have_posts()) {
            $query->the_post();
            $posts[] = array(
                'id' => get_the_ID(),
                'title' => get_the_title(),
                'link' => get_permalink(),
                'views' => (int) get_post_meta(get_the_ID(), 'post_views_count', true),
            );
        }
        wp_reset_postdata();
    }
    return $posts;
}

В этом примере мы регистрируем маршрут /wp-json/wpacademy/v1/popular-posts/, который возвращает 5 самых просматриваемых постов, используя метаполе post_views_count. Обратите внимание, что для простоты разрешение доступа указано как __return_true, но в реальном проекте нужно продумать проверку прав.

Разбор параметров функции register_rest_route

Первый аргумент — пространство имён, чтобы избежать конфликтов (здесь wpacademy/v1). Второй — путь эндпоинта. Третий — массив с параметрами:

  • methods — HTTP-методы (GET, POST, PUT, DELETE и др.).
  • callback — функция, которая обрабатывает запрос и возвращает данные.
  • permission_callback — функция проверки прав доступа.

Можно добавить дополнительные параметры, например, валидацию входных данных, описание аргументов и пр.

Как обрабатывать POST-запросы и принимать данные в теле запроса

Создадим пример эндпоинта, который принимает данные через POST-запрос и создаёт новую запись типа «отзыв».

add_action('rest_api_init', 'wpacademy_register_create_review_endpoint');
function wpacademy_register_create_review_endpoint() {
    register_rest_route('wpacademy/v1', '/create-review/', array(
        'methods' => 'POST',
        'callback' => 'wpacademy_create_review',
        'permission_callback' => function () {
            return current_user_can('edit_posts');
        },
        'args' => array(
            'title' => array(
                'required' => true,
                'type' => 'string',
                'sanitize_callback' => 'sanitize_text_field',
            ),
            'content' => array(
                'required' => true,
                'type' => 'string',
                'sanitize_callback' => 'sanitize_textarea_field',
            ),
            'rating' => array(
                'required' => true,
                'type' => 'integer',
                'validate_callback' => function($param, $request, $key) {
                    return $param >= 1 && $param <= 5;
                },
            ),
        ),
    ));
}

function wpacademy_create_review($request) {
    $params = $request->get_params();
    $post_id = wp_insert_post(array(
        'post_title' => $params['title'],
        'post_content' => $params['content'],
        'post_type' => 'review',
        'post_status' => 'pending',
    ));

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

    update_post_meta($post_id, 'rating', $params['rating']);

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

Здесь мы определяем обязательные аргументы с валидацией и санитаризацией, проверяем права пользователя и создаём запись с типом review. Такой подход помогает безопасно принимать пользовательские данные через REST API.

Советы по безопасности и оптимизации кастомных эндпоинтов

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

  • Проверяйте права доступа — используйте permission_callback для ограничения доступа по ролям и возможностям.
  • Санитизируйте и валидируйте данные — не доверяйте входящим параметрам, используйте встроенные функции WordPress.
  • Кешируйте ответы — если данные не меняются часто, используйте transient API или внешнее кеширование.
  • Обрабатывайте ошибки корректно — возвращайте понятные сообщения и HTTP-коды.
  • Логируйте важные события — для отладки и мониторинга.

Также стоит учитывать нагрузку на сервер — сложные запросы и тяжелая логика могут замедлять сайт.

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

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

  • WP REST API Controller — позволяет управлять доступом к стандартным и кастомным эндпоинтам через админку.
  • REST API Helper — добавляет инструменты для отладки и расширения API.
  • Advanced Custom Fields (ACF) — с дополнением ACF to REST API легко выводить кастомные поля в ответах.
  • Postman или Insomnia — внешние инструменты для тестирования API-запросов.

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

Выводы и рекомендации по созданию кастомных REST API эндпоинтов в WordPress

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

Главное — грамотно проектировать структуру API, обеспечивать безопасность и оптимизировать производительность. Приведённые примеры с кодом на wpacademy.ru помогут быстро начать создавать свои решения и расширять функциональность сайтов на WordPress.

Как настроить AJAX в WordPress для динамического обновления контента
18.11.2025
Удаление неиспользуемых таблиц в базе данных WordPress: безопасный метод
23.01.2026
Как добавить уникальные метаданные для страниц в WordPress без плагинов
21.02.2026
Автоматическое удаление незаконченых заказов WooCommerce
16.05.2026
Как настроить автоматическое удаление неиспользуемых медиафайлов в WordPress
13.02.2026