WordPress с версии 4.7 включает встроенный REST API, который позволяет создавать, читать, обновлять и удалять данные сайта через HTTP-запросы. Это мощный инструмент для интеграций, разработки мобильных приложений и кастомных интерфейсов. В этой статье мы подробно рассмотрим, как создать свой собственный REST API endpoint в WordPress, чтобы расширить возможности сайта и взаимодействовать с данными по своему сценарию.
Что такое REST API endpoint в WordPress и зачем он нужен
REST API endpoint — это URL, на который можно отправлять HTTP-запросы с определённым методом (GET, POST, PUT, DELETE) для выполнения операций с данными. WordPress по умолчанию предоставляет множество стандартных endpoint, например, для работы с постами, страницами, комментариями и пользователями.
Но бывает, что нужно создать кастомный endpoint, который будет возвращать или принимать данные, специфичные для вашего проекта — например, список товаров с дополнительными метаполями, статистику, пользовательские данные или интеграция с внешними сервисами.
Создание собственного endpoint позволяет:
- Реализовать API для мобильных приложений и SPA;
- Организовать обмен данными с внешними системами;
- Создавать кастомные интерфейсы управления;
- Выделять бизнес-логику и данные отдельно от шаблонов сайта.
Регистрация собственного REST API endpoint в WordPress
Чтобы создать новый endpoint, нужно зарегистрировать маршрут (route) с помощью функции register_rest_route(), которую вызывают на хук rest_api_init. Рассмотрим пример создания endpoint, который возвращает список последних 5 постов с кастомным полем.
Добавьте следующий код в файл functions.php вашей темы или в свой плагин:
add_action('rest_api_init', 'wpmake_register_custom_endpoint');
function wpmake_register_custom_endpoint() {
register_rest_route('wpmake/v1', '/latest-posts/', [
'methods' => 'GET',
'callback' => 'wpmake_get_latest_posts',
'permission_callback' => '__return_true', // публичный endpoint
]);
}
function wpmake_get_latest_posts(WP_REST_Request $request) {
$args = [
'numberposts' => 5,
'post_status' => 'publish',
];
$posts = get_posts($args);
$data = [];
foreach ($posts as $post) {
$data[] = [
'id' => $post->ID,
'title' => $post->post_title,
'date' => $post->post_date,
'custom_field' => get_post_meta($post->ID, 'wpmake_custom_field', true),
];
}
return rest_ensure_response($data);
}В этом примере мы регистрируем endpoint /wp-json/wpmake/v1/latest-posts/, который возвращает JSON с последними пятью постами и значением кастомного поля wpmake_custom_field. Параметр permission_callback установлен в __return_true, что означает публичный доступ без авторизации. В реальных проектах стоит использовать проверки прав доступа.
Аргументы и методы запроса: расширяем функциональность
Часто нужно, чтобы endpoint принимал параметры: например, количество постов, категории или фильтры. Рассмотрим, как добавить параметр count для задания количества постов.
add_action('rest_api_init', 'wpmake_register_custom_endpoint_with_params');
function wpmake_register_custom_endpoint_with_params() {
register_rest_route('wpmake/v1', '/latest-posts/', [
'methods' => 'GET',
'callback' => 'wpmake_get_latest_posts_with_params',
'permission_callback' => '__return_true',
'args' => [
'count' => [
'required' => false,
'default' => 5,
'validate_callback' => function($param, $request, $key) {
return is_numeric($param) && $param > 0 && $param <= 20;
},
],
],
]);
}
function wpmake_get_latest_posts_with_params(WP_REST_Request $request) {
$count = (int) $request->get_param('count');
$args = [
'numberposts' => $count,
'post_status' => 'publish',
];
$posts = get_posts($args);
$data = [];
foreach ($posts as $post) {
$data[] = [
'id' => $post->ID,
'title' => $post->post_title,
'date' => $post->post_date,
];
}
return rest_ensure_response($data);
}Теперь можно вызывать endpoint с параметром count, например: /wp-json/wpmake/v1/latest-posts/?count=10, чтобы получить 10 постов. Валидация параметров помогает избежать ошибок и защититься от некорректных значений.
Обработка POST-запросов и безопасность
Для создания или изменения данных через REST API часто используются POST или PUT-запросы. В этом случае крайне важно проверять права пользователя и применять nonce или OAuth для аутентификации.
Пример регистрации POST endpoint для создания простого отзыва с проверкой прав:
add_action('rest_api_init', 'wpmake_register_create_review_endpoint');
function wpmake_register_create_review_endpoint() {
register_rest_route('wpmake/v1', '/reviews/', [
'methods' => 'POST',
'callback' => 'wpmake_create_review',
'permission_callback' => function() {
return current_user_can('edit_posts');
},
'args' => [
'title' => [
'required' => true,
'sanitize_callback' => 'sanitize_text_field',
],
'content' => [
'required' => true,
'sanitize_callback' => 'sanitize_textarea_field',
],
],
]);
}
function wpmake_create_review(WP_REST_Request $request) {
$title = $request->get_param('title');
$content = $request->get_param('content');
$new_post = [
'post_title' => $title,
'post_content' => $content,
'post_status' => 'pending',
'post_type' => 'review',
];
$post_id = wp_insert_post($new_post);
if (is_wp_error($post_id)) {
return new WP_Error('post_creation_failed', 'Ошибка создания отзыва', ['status' => 500]);
}
return rest_ensure_response(['message' => 'Отзыв создан', 'id' => $post_id]);
}В этом примере endpoint /wp-json/wpmake/v1/reviews/ принимает POST-запрос с параметрами title и content, создает новый отзыв (предполагается, что у вас зарегистрирован тип записи review) и возвращает статус. Права проверяются через current_user_can('edit_posts'), что ограничивает создание отзывов авторизованными пользователями с соответствующими правами.
Тестирование и отладка REST API endpoint
Для тестирования собственного REST API endpoint можно использовать инструменты:
- Postman — удобный клиент для отправки запросов и просмотра ответов;
- curl — командная строка для HTTP-запросов;
- WP-CLI — некоторые команды для тестирования API;
- Браузер — для GET-запросов.
Пример запроса с помощью curl:
curl -X GET https://wpmake.ru/wp-json/wpmake/v1/latest-posts/При возникновении ошибок полезно включить логирование ошибок и использовать функции error_log() или плагины для дебага, например Query Monitor.
Рекомендации по безопасности и оптимизации
При создании собственных endpoint стоит учитывать:
- Проверку прав доступа. Всегда используйте
permission_callback, чтобы ограничить доступ к чувствительной информации. - Валидацию и санитацию данных. Не доверяйте пользовательскому вводу, валидируйте и очищайте все параметры.
- Кэширование. Для часто запрашиваемых данных используйте кэширование, чтобы снизить нагрузку на сервер.
- Обработка ошибок. Возвращайте понятные сообщения об ошибках с правильными HTTP-кодами.
Полезные плагины для работы с REST API в WordPress
Хотя создание собственного endpoint обычно пишется вручную, есть плагины, которые упрощают работу с REST API:
- WP REST API Controller — позволяет управлять стандартными endpoint и правами через интерфейс;
- Advanced Custom Fields (ACF) to REST API — добавляет в REST API данные из полей ACF;
- Custom Post Type UI — помогает создавать типы записей, которые автоматически доступны в REST API;
- JWT Authentication for WP REST API — добавляет аутентификацию через токены.
Используйте эти инструменты для ускорения разработки и повышения безопасности.
Выводы и лучшие практики
Создание собственного REST API endpoint — отличная возможность расширить функционал WordPress и интегрировать сайт с любыми внешними системами. Главное — четко спроектировать маршруты, продумать права доступа и обеспечить безопасность.
Обязательно тестируйте все endpoint, документируйте их для команды и следите за производительностью.
Таким образом, вы сможете создавать гибкие и мощные решения на базе WordPress, которые будут легко масштабироваться и поддерживаться.