Руководство по созданию собственного REST API в WordPress

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

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

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

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

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

Преимущества собственного REST API в WordPress:

  • Гибкость — можно создавать интерфейсы под конкретные нужды.
  • Безопасность — контролируем доступ и валидацию данных.
  • Интеграция — удобно связывать сайт с внешними сервисами и приложениями.

Как зарегистрировать собственный REST API маршрут в WordPress

В WordPress для регистрации новых маршрутов REST API используется функция register_rest_route(), которую нужно вызывать на хук rest_api_init. Рассмотрим пример создания простого маршрута, который будет отдавать приветственное сообщение.

add_action('rest_api_init', 'wp8_register_hello_route');
function wp8_register_hello_route() {
    register_rest_route('wp8/v1', '/hello', array(
        'methods' => 'GET',
        'callback' => 'wp8_hello_callback',
    ));
}

function wp8_hello_callback() {
    return array('message' => 'Привет от WP8 REST API!');
}

После добавления этого кода в файл functions.php темы или в собственный плагин, маршрут будет доступен по адресу https://ваш-сайт/wp-json/wp8/v1/hello.

При обращении к этому URL вы получите JSON с сообщением. Это базовый пример, который можно расширять.

Пояснения к коду регистрации маршрута

Первым параметром register_rest_route() является пространство имён API — здесь мы использовали wp8/v1. Это позволяет группировать маршруты и версионировать API.

Второй параметр — путь маршрута, в нашем случае /hello.

Третий — массив настроек, где указываются HTTP методы, callback-функция, а также дополнительные параметры, такие как разрешения.

Добавление параметров и валидация данных

REST API становится полезнее, когда умеет принимать данные от клиента. Рассмотрим пример маршрута, который принимает параметр name и возвращает персонализированное приветствие.

add_action('rest_api_init', 'wp8_register_greet_route');
function wp8_register_greet_route() {
    register_rest_route('wp8/v1', '/greet', array(
        'methods' => 'GET',
        'callback' => 'wp8_greet_callback',
        'args' => array(
            'name' => array(
                'required' => true,
                'validate_callback' => function($param, $request, $key) {
                    return is_string($param) && !empty($param);
                },
                'sanitize_callback' => 'sanitize_text_field'
            ),
        ),
    ));
}

function wp8_greet_callback($request) {
    $name = $request->get_param('name');
    return array('message' => "Привет, $name! Добро пожаловать в WP8 REST API.");
}

Если вызвать https://ваш-сайт/wp-json/wp8/v1/greet?name=Иван, то в ответ придёт сообщение с именем.

Обратите внимание на параметры args: здесь мы указываем обязательность параметра, функцию проверки и очистки данных. Это помогает защитить API от некорректных запросов.

Советы по валидации и безопасности

При создании REST API важно валидировать все входящие данные и использовать функции очистки, такие как sanitize_text_field(), absint() и т.д., чтобы избежать XSS и других уязвимостей.

Для защиты маршрутов можно реализовать проверку прав доступа через параметр permission_callback. Например, чтобы маршрут был доступен только авторизованным пользователям:

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

Создание REST API для кастомного типа записи (Custom Post Type)

Практическая задача — добавить в REST API свои нестандартные записи. Допустим, у нас есть кастомный тип записи book. Чтобы включить его поддержку в REST API, достаточно при регистрации типа указать 'show_in_rest' => true.

function wp8_register_cpt_book() {
    $args = array(
        'label' => 'Книги',
        'public' => true,
        'show_in_rest' => true,
        'supports' => array('title', 'editor', 'custom-fields'),
    );
    register_post_type('book', $args);
}
add_action('init', 'wp8_register_cpt_book');

После этого стандартный REST API WordPress будет отдавать записи типа book по адресу /wp-json/wp/v2/book.

Но что если нам нужно добавить собственные поля или обработку? Можно расширить маршрут или создать свой.

Пример создания собственного маршрута для кастомных данных книги

add_action('rest_api_init', 'wp8_register_book_custom_route');
function wp8_register_book_custom_route() {
    register_rest_route('wp8/v1', '/book-info/(?P<id>\d+)', array(
        'methods' => 'GET',
        'callback' => 'wp8_book_info_callback',
        'args' => array(
            'id' => array(
                'validate_callback' => 'is_numeric',
            ),
        ),
    ));
}

function wp8_book_info_callback($request) {
    $id = (int)$request->get_param('id');
    $post = get_post($id);
    if (!$post || $post->post_type !== 'book') {
        return new WP_Error('no_book', 'Книга не найдена', array('status' => 404));
    }
    $custom_field = get_post_meta($id, 'wp8_book_author', true);
    return array(
        'id' => $id,
        'title' => $post->post_title,
        'content' => $post->post_content,
        'author' => $custom_field,
    );
}

Этот маршрут возвращает информацию о книге по ID, включая пользовательское поле wp8_book_author.

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

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

  • WP REST API Controller — позволяет управлять, какие поля и типы записей доступны через REST API без программирования.
  • REST API Toolbox — добавляет инструменты для расширения функционала API, включая создание кастомных маршрутов.
  • Postman (внешний инструмент) — для тестирования и отладки запросов к API.

Использование этих инструментов ускорит разработку и поможет избежать типичных ошибок.

Заключение: как применять собственный REST API на практике

Создание собственного REST API в WordPress — мощный способ расширить функциональность сайта, сделать его доступным для внешних приложений и мобильных клиентов. Вы можете создавать интерактивные интерфейсы, интегрировать CRM, мобильные приложения, одностраничные приложения (SPA) и многое другое.

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

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

Как создать многоуровневое меню в WordPress с помощью плагинов и кода
27.11.2025
Как создать собственный виджет в WordPress с примерами кода
09.01.2026
Как установить лимит на число одновременных AJAX-запросов в WordPress
23.01.2026
Как использовать WPRemark для оценки и отзывов в WordPress
16.01.2026
Как сделать просмотр видео в AJAX на WordPress
26.02.2026