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.