WordPress REST API — мощный инструмент, который позволяет создавать и расширять функциональность сайта через удобный интерфейс взаимодействия с данными. В этой статье мы подробно разберём, как создавать собственные кастомные REST API эндпоинты в WordPress, чтобы получать и отправлять данные по своему усмотрению. Это особенно полезно, если вы хотите интегрировать WordPress с внешними приложениями или сделать гибкое SPA-приложение на React, Vue или другом фреймворке.
Что такое кастомные эндпоинты REST API в WordPress и зачем они нужны
WordPress из коробки предоставляет стандартный набор API для работы с постами, пользователями, таксономиями и медиа. Но часто этого недостаточно, когда нужно получить данные из кастомных таблиц, сложные выборки или бизнес-логику, не поддерживаемую стандартным API.
Создавая кастомный эндпоинт, мы можем:
- Возвращать данные, которых нет в стандартном API.
- Обрабатывать сложную логику на сервере.
- Создавать безопасные точки входа для AJAX-запросов или внешних сервисов.
- Интегрировать WordPress с мобильными приложениями и SPA.
Это значительно расширяет возможности сайта и позволяет создавать уникальные решения.
Регистрация кастомного эндпоинта: базовый пример
Для создания кастомного эндпоинта используем функцию register_rest_route, которую вызываем в хук rest_api_init. Ниже простой пример, который регистрирует маршрут /wpsource/v1/hello и возвращает приветственное сообщение.
add_action('rest_api_init', function () {
register_rest_route('wpsource/v1', '/hello', array(
'methods' => 'GET',
'callback' => 'wpsource_restapi_hello_callback',
));
});
function wpsource_restapi_hello_callback() {
return array('message' => 'Привет от WpSource REST API!');
}
После добавления этого кода в файл functions.php или в отдельный плагин, запрос по адресу https://ваш-сайт.ru/wp-json/wpsource/v1/hello вернёт JSON с сообщением.
Передача параметров и валидация данных
Реальные задачи требуют передачи параметров. Например, получим приветствие с именем пользователя, переданным в запросе. Добавим параметр name и валидируем его.
add_action('rest_api_init', function () {
register_rest_route('wpsource/v1', '/greet', array(
'methods' => 'GET',
'callback' => 'wpsource_restapi_greet_callback',
'args' => array(
'name' => array(
'required' => true,
'validate_callback' => function($param, $request, $key) {
return is_string($param) && !empty($param);
},
),
),
));
});
function wpsource_restapi_greet_callback($request) {
$name = sanitize_text_field($request->get_param('name'));
return array('message' => "Привет, {$name}!");
}
Теперь, сделав запрос https://ваш-сайт.ru/wp-json/wpsource/v1/greet?name=Иван, получим ответ с персональным приветствием.
Кастомный эндпоинт для получения данных из кастомного типа записей
Предположим, у вас на сайте есть кастомный тип записей product. Создадим эндпоинт, который вернёт список продуктов с названием и ценой (поле _price хранится в мета-данных).
add_action('rest_api_init', function () {
register_rest_route('wpsource/v1', '/products', array(
'methods' => 'GET',
'callback' => 'wpsource_restapi_get_products',
));
});
function wpsource_restapi_get_products() {
$args = array(
'post_type' => 'product',
'post_status' => 'publish',
'numberposts' => 10,
);
$posts = get_posts($args);
$data = array();
foreach ($posts as $post) {
$price = get_post_meta($post->ID, '_price', true);
$data[] = array(
'id' => $post->ID,
'title' => get_the_title($post),
'price' => $price ? floatval($price) : null,
);
}
return $data;
}
Этот эндпоинт поможет интегрировать товары с внешним сервисом или вывести их в кастомном фронтенде.
Аутентификация и права доступа для REST API
Очень важно контролировать, кто может обращаться к вашим кастомным эндпоинтам, особенно если они могут изменять данные. WordPress поддерживает несколько способов аутентификации, включая cookie, OAuth и JWT.
В параметрах register_rest_route можно указать параметр permission_callback, который проверит права доступа.
add_action('rest_api_init', function () {
register_rest_route('wpsource/v1', '/private-data', array(
'methods' => 'GET',
'callback' => 'wpsource_restapi_private_data',
'permission_callback' => function () {
return current_user_can('read');
},
));
});
function wpsource_restapi_private_data() {
return array('secret' => 'Это закрытые данные, доступны только авторизованным пользователям');
}
Такой подход защитит ваши данные от несанкционированного доступа.
Практические советы и полезные плагины для работы с REST API
Для упрощения работы с REST API можно использовать плагины:
- Clearfy Pro — оптимизация и защита API.
- WPRemark — расширение функционала комментариев с поддержкой REST.
Также рекомендуем внимательно тестировать свои эндпоинты с помощью Postman или встроенного REST API тестера в браузере.
Заключение
Создание кастомных REST API эндпоинтов в WordPress — это простой и мощный способ расширить возможности сайта, интегрировать его с внешними сервисами и улучшить пользовательский опыт. Используйте валидацию, аутентификацию и внимательно продумывайте логику для безопасной и стабильной работы API.