WP REST API — мощный инструмент, встроенный в WordPress, который позволяет создавать, читать, обновлять и удалять данные сайта через HTTP-запросы. Это открывает широкие возможности для интеграций, мобильных приложений и кастомных решений. В этой статье подробно разберём, как создавать свои собственные REST API endpoint’ы в WordPress, чтобы расширить функционал сайта и эффективно работать с данными.
Что такое пользовательские REST API endpoint’ы в WordPress
По умолчанию WordPress предоставляет множество REST API маршрутов для работы с постами, пользователями, таксономиями и другими сущностями. Однако часто возникает необходимость добавить свои собственные endpoint’ы, которые будут возвращать или принимать данные в формате JSON для специфических задач вашего сайта.
Пользовательские endpoint’ы позволяют:
- Создавать API для нестандартных типов записей или данных.
- Обеспечивать интеграцию с внешними сервисами.
- Реализовывать специальные методы обработки данных.
Для регистрации своих маршрутов используется функция register_rest_route(), которую нужно вызвать в хуке rest_api_init.
Регистрация простого пользовательского endpoint’a
Рассмотрим пример создания простого endpoint’a, который будет возвращать приветствие.
add_action('rest_api_init', 'wpfind_register_hello_endpoint');
function wpfind_register_hello_endpoint() {
register_rest_route('wpfind/v1', '/hello/', [
'methods' => 'GET',
'callback' => 'wpfind_hello_callback',
]);
}
function wpfind_hello_callback() {
return ['message' => 'Привет от WPFind!'];
}
Здесь мы создаём маршрут /wp-json/wpfind/v1/hello/, который при GET-запросе возвращает JSON с приветственным сообщением. Это базовый пример, который можно расширять.
Создание endpoint’а для получения кастомных данных
Предположим, у вас есть кастомный тип записи product, и вы хотите через API получить список товаров с определённым набором полей.
Пример регистрации endpoint’а:
add_action('rest_api_init', 'wpfind_register_products_endpoint');
function wpfind_register_products_endpoint() {
register_rest_route('wpfind/v1', '/products/', [
'methods' => 'GET',
'callback' => 'wpfind_get_products',
'permission_callback' => '__return_true',
]);
}
function wpfind_get_products(WP_REST_Request $request) {
$args = [
'post_type' => 'product',
'posts_per_page' => 10,
];
$query = new WP_Query($args);
$products = [];
if ($query->have_posts()) {
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),
'link' => get_permalink(),
];
}
wp_reset_postdata();
}
return $products;
}
Этот endpoint вернёт JSON-массив из 10 товаров с их основными данными. Обратите внимание, что для публичных данных можно использовать 'permission_callback' => '__return_true', но для чувствительной информации лучше реализовать проверку прав.
Обработка POST запросов и создание новых записей через API
REST API позволяет не только получать данные, но и создавать их. Пример endpoint’a для создания новой записи типа product через POST запрос:
add_action('rest_api_init', 'wpfind_register_create_product_endpoint');
function wpfind_register_create_product_endpoint() {
register_rest_route('wpfind/v1', '/products/create/', [
'methods' => 'POST',
'callback' => 'wpfind_create_product',
'permission_callback' => 'wpfind_permission_check',
'args' => [
'title' => [
'required' => true,
'type' => 'string',
],
'price' => [
'required' => true,
'type' => 'number',
],
],
]);
}
function wpfind_permission_check() {
return current_user_can('edit_posts');
}
function wpfind_create_product(WP_REST_Request $request) {
$params = $request->get_params();
$post_id = wp_insert_post([
'post_title' => sanitize_text_field($params['title']),
'post_type' => 'product',
'post_status' => 'publish',
]);
if (is_wp_error($post_id)) {
return new WP_Error('cant-create', 'Не удалось создать товар', ['status' => 500]);
}
update_post_meta($post_id, '_price', floatval($params['price']));
return ['success' => true, 'product_id' => $post_id];
}
В этом примере добавлена проверка прав пользователя через permission_callback, что важно для безопасности. Новый товар создаётся с заголовком и ценой, переданными в теле POST-запроса.
Безопасность и аутентификация в пользовательских endpoint’ах
При создании REST API endpoint’ов важно учитывать безопасность. Публичные данные можно отдавать без проверки, но для создания, редактирования и удаления данных необходима аутентификация и проверка прав.
WordPress поддерживает несколько методов аутентификации:
- Куки и сессии (для запросов из браузера, когда пользователь залогинен)
- Basic Auth (для тестов и внешних приложений)
- OAuth или JWT (для сложных интеграций)
Для большинства задач достаточно проверить права пользователя через функции current_user_can() или реализовать собственный permission_callback.
Использование плагина Clearfy Pro для управления REST API
Если вы хотите гибко управлять доступом к REST API, можно использовать Clearfy Pro. Этот плагин позволяет отключать ненужные endpoint’ы, управлять правами и повышать безопасность сайта без дополнительных настроек кода.
Полезные советы и рекомендации при работе с WP REST API
- Всегда фильтруйте и валидируйте входящие данные.
- Используйте
permission_callbackдля контроля доступа. - Документируйте свои endpoint’ы для удобства разработчиков.
- Для сложных данных используйте кастомные контроллеры и схемы.
- Тестируйте API с помощью инструментов Postman или curl.
Заключение
Создание пользовательских REST API endpoint’ов в WordPress — это мощный способ расширить возможности сайта и интегрировать его с внешними сервисами. С помощью нескольких функций и правильного подхода можно быстро организовать обмен данными, улучшить UX и автоматизировать процессы. Если хотите упростить управление API и безопасность, рекомендуем обратить внимание на Clearfy Pro.