wpcorp.ru wordpress WP Corp

Как сделать собственный REST API в WordPress с примерами кода

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

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

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

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

  • Добавлять новые маршруты для обработки специфичных запросов.
  • Разграничивать доступ к данным через кастомные права.
  • Интегрировать сторонние приложения с вашим сайтом.
  • Оптимизировать работу фронтенда за счет асинхронной загрузки данных.

Далее посмотрим, как реализовать собственный REST API на практике.

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

Для начала создадим минимальный плагин, который зарегистрирует новый REST API маршрут. В корне вашего WordPress сайта перейдите в папку wp-content/plugins и создайте папку wpcorp-rest-api. В ней создайте файл wpcorp-rest-api.php со следующим содержанием:

<?php
/**
 * Plugin Name: WPCorp REST API Custom Endpoint
 * Description: Добавляет собственный REST API маршрут
 * Version: 1.0
 * Author: WPCorp
 */

add_action('rest_api_init', 'wpcorp_register_custom_api_route');

function wpcorp_register_custom_api_route() {
    register_rest_route('wpcorp/v1', '/hello', [
        'methods' => 'GET',
        'callback' => 'wpcorp_hello_endpoint',
        'permission_callback' => '__return_true',
    ]);
}

function wpcorp_hello_endpoint(WP_REST_Request $request) {
    return [
        'message' => 'Привет из собственного REST API WPCorp!'
    ];
}

Объяснение кода:

  • add_action('rest_api_init', ...) — добавляем регистрацию маршрута при инициализации REST API.
  • register_rest_route('wpcorp/v1', '/hello', ...) — создаем маршрут /wp-json/wpcorp/v1/hello.
  • permission_callback — без проверки доступа, можно сделать более строгую.
  • wpcorp_hello_endpoint — функция-обработчик, возвращающая простой JSON ответ.

Теперь активируйте плагин в админке WordPress и перейдите по адресу https://ваш_сайт/wp-json/wpcorp/v1/hello. Вы увидите JSON ответ с сообщением.

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

Часто нужно не только получать данные, но и передавать их на сервер. Для этого зарегистрируем POST-метод с параметрами и валидацией.

add_action('rest_api_init', 'wpcorp_register_post_route');

function wpcorp_register_post_route() {
    register_rest_route('wpcorp/v1', '/sum', [
        'methods' => 'POST',
        'callback' => 'wpcorp_sum_endpoint',
        'permission_callback' => 'wpcorp_permission_check',
        'args' => [
            'a' => [
                'required' => true,
                'validate_callback' => 'is_numeric'
            ],
            'b' => [
                'required' => true,
                'validate_callback' => 'is_numeric'
            ]
        ]
    ]);
}

function wpcorp_sum_endpoint(WP_REST_Request $request) {
    $a = $request->get_param('a');
    $b = $request->get_param('b');
    $sum = $a + $b;
    return [
        'result' => $sum
    ];
}

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

Объяснение:

  • Маршрут /wp-json/wpcorp/v1/sum принимает POST-запрос с параметрами a и b.
  • Параметры валидируются — должны быть числами.
  • Проверка прав — только авторизованные пользователи с правом редактирования записей могут обращаться к маршруту.
  • Функция возвращает сумму параметров.

Такой подход полезен для API, выполняющего расчеты или обновляющего данные на сайте.

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

Если у вас есть кастомный тип записи, например, product, можно добавить для него собственный эндпоинт или расширить стандартный.

Допустим, вы хотите получить список продуктов с дополнительным кастомным полем price и фильтровать по нему.

add_action('rest_api_init', 'wpcorp_register_products_route');

function wpcorp_register_products_route() {
    register_rest_route('wpcorp/v1', '/products', [
        'methods' => 'GET',
        'callback' => 'wpcorp_get_products',
        'permission_callback' => '__return_true',
        'args' => [
            'min_price' => [
                'required' => false,
                'validate_callback' => 'is_numeric'
            ]
        ]
    ]);
}

function wpcorp_get_products(WP_REST_Request $request) {
    $min_price = $request->get_param('min_price');

    $args = [
        'post_type' => 'product',
        'posts_per_page' => 10,
        'meta_query' => []
    ];

    if ($min_price !== null) {
        $args['meta_query'][] = [
            'key' => 'price',
            'value' => $min_price,
            'type' => 'NUMERIC',
            'compare' => '>='
        ];
    }

    $query = new WP_Query($args);
    $products = [];

    while ($query->have_posts()) {
        $query->the_post();
        $products[] = [
            'id' => get_the_ID(),
            'title' => get_the_title(),
            'price' => get_post_meta(get_the_ID(), 'price', true)
        ];
    }
    wp_reset_postdata();

    return $products;
}

Объяснение:

  • Этот маршрут возвращает список продуктов с опциональным фильтром по минимальной цене.
  • Используется WP_Query с мета-запросом для фильтрации.
  • В ответе — массив объектов с id, заголовком и ценой.

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

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

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

Эти инструменты помогут быстро настроить и обезопасить собственный API.

Рекомендации по безопасности и производительности REST API

При создании собственного REST API необходимо учитывать:

  • Проверка прав доступа. Никогда не открывайте чувствительные маршруты без проверки пользователя. Используйте permission_callback для ограничения доступа.
  • Валидация параметров. Проверяйте входящие данные, чтобы избежать ошибок и уязвимостей.
  • Кэширование. Если API возвращает нечасто меняющиеся данные, используйте кэширование для снижения нагрузки.
  • Логирование и отладка. Для сложных API полезно вести логи запросов и ошибок, чтобы быстро находить и исправлять проблемы.

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

×
Оптимизируй свой сайт!

Скидка -15% на премиум плагин Clearfy Pro

Купить плагин сейчас ⋙