Как создать и использовать REST API в WordPress

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

Что такое REST API в WordPress

REST API (Representational State Transfer Application Programming Interface) — это набор правил, позволяющих обмениваться данными между различными системами через HTTP-запросы. В WordPress REST API встроен с версии 4.7 и позволяет работать с постами, пользователями, таксономиями и другими объектами сайта.

Благодаря REST API вы можете:

  • Создавать одностраничные приложения (SPA) на React, Vue или Angular, используя WordPress как backend.
  • Интегрировать сайт с мобильными приложениями.
  • Получать и изменять данные сайта из внешних систем.
  • Добавлять собственные REST API маршруты для кастомных данных.

Создание собственного REST API эндпоинта в WordPress

Регистрация маршрута

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

add_action('rest_api_init', 'wp7_register_custom_route');
function wp7_register_custom_route() {
    register_rest_route('wp7/v1', '/hello', array(
        'methods' => 'GET',
        'callback' => 'wp7_custom_hello_callback',
    ));
}

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

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

Приём параметров и валидация

Часто нужно принимать параметры от клиента. Добавим параметр name, которым можно персонализировать ответ.

add_action('rest_api_init', 'wp7_register_custom_route');
function wp7_register_custom_route() {
    register_rest_route('wp7/v1', '/hello', array(
        'methods' => 'GET',
        'callback' => 'wp7_custom_hello_callback',
        'args' => array(
            'name' => array(
                'required' => false,
                'validate_callback' => function($param, $request, $key) {
                    return is_string($param) && strlen($param) > 0;
                },
            ),
        ),
    ));
}

function wp7_custom_hello_callback($request) {
    $name = $request->get_param('name');
    if ($name) {
        return array('message' => 'Привет, ' . sanitize_text_field($name) . '! Это WP7 REST API.');
    } else {
        return array('message' => 'Привет от WP7 REST API!');
    }
}

Теперь можно вызывать https://ваш-сайт.ru/wp-json/wp7/v1/hello?name=Иван и получить персонализированный ответ.

Работа с кастомными типами записей через REST API

Если на вашем сайте есть кастомные типы записей, например product, их тоже можно использовать через REST API. Для этого нужно включить поддержку REST API при регистрации типа записи.

function wp7_register_product_cpt() {
    $args = array(
        'label' => 'Продукты',
        'public' => true,
        'show_in_rest' => true, // Включаем REST API
        'supports' => array('title', 'editor', 'custom-fields'),
    );
    register_post_type('product', $args);
}
add_action('init', 'wp7_register_product_cpt');
<

После этого все стандартные REST API методы для типа product будут доступны по адресу /wp-json/wp/v2/product.

Добавление кастомных полей в REST API

По умолчанию кастомные поля (custom fields) не отображаются в ответе API. Чтобы добавить их, нужно зарегистрировать их в REST API с помощью register_rest_field.

add_action('rest_api_init', 'wp7_register_product_custom_fields');
function wp7_register_product_custom_fields() {
    register_rest_field('product', 'price', array(
        'get_callback' => 'wp7_get_product_price',
        'update_callback' => 'wp7_update_product_price',
        'schema' => array(
            'description' => 'Цена продукта',
            'type' => 'number',
            'context' => array('view', 'edit'),
        ),
    ));
}

function wp7_get_product_price($object) {
    return get_post_meta($object['id'], 'price', true);
}

function wp7_update_product_price($value, $object, $field_name) {
    if (!is_numeric($value)) {
        return new WP_Error('rest_invalid_param', 'Цена должна быть числом', array('status' => 400));
    }
    return update_post_meta($object->ID, $field_name, $value);
}

Теперь в запросах к /wp-json/wp/v2/product поле price будет отображаться и его можно будет обновлять через PUT/PATCH.

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

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

  • WP REST API Controller — позволяет управлять доступом к REST API для разных типов записей и таксономий.
  • Advanced Custom Fields (ACF) вместе с ACF to REST API — добавляет кастомные поля ACF в ответы REST API без дополнительного кода.
  • JWT Authentication for WP REST API — добавляет поддержку JSON Web Token для авторизации через REST API.

Безопасность REST API в WordPress

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

Авторизация и аутентификация

Для операций изменения данных (POST, PUT, DELETE) требуется авторизация. WordPress использует куки и nonce, но для сторонних клиентов лучше использовать токены, например JWT. Плагин JWT Authentication for WP REST API поможет настроить такой механизм.

Ограничение доступа к эндпоинтам

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

register_rest_route('wp7/v1', '/hello', array(
    'methods' => 'GET',
    'callback' => 'wp7_custom_hello_callback',
    'permission_callback' => function() {
        return current_user_can('read');
    },
));

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

Фильтрация и валидация данных

Всегда проверяйте и очищайте входящие данные, чтобы избежать уязвимостей типа SQL-инъекций или XSS. В нашем примере мы использовали sanitize_text_field и валидацию параметров.

Как использовать REST API в JavaScript на фронтенде

Пример простого запроса к созданному маршруту с использованием fetch:

fetch('https://ваш-сайт.ru/wp-json/wp7/v1/hello?name=Иван')
  .then(response => response.json())
  .then(data => console.log(data.message))
  .catch(error => console.error('Ошибка:', error));

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

Заключение

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

Отложенная загрузка картинок в WordPress без плагинов: практическое руководство
11.12.2025
Как сделать автоматическое сохранение форм в WordPress с помощью JavaScript
14.01.2026
Как использовать WPRemark для автоматического комментирования в WordPress
10.01.2026
Как защитить WordPress от bruteforce атак
20.11.2025
Как создать многоязычный сайт на WordPress без плагинов
18.12.2025