WordPress из коробки предоставляет мощный REST API, который можно использовать для управления контентом и интеграции с внешними приложениями. Но иногда стандартных эндпоинтов недостаточно — требуется создать собственные маршруты, которые будут возвращать специфичные данные или выполнять уникальные операции. В этой статье мы подробно рассмотрим, как создать собственный REST API в WordPress, зарегистрировать новые эндпоинты и обработать запросы с примерами кода.
Что такое REST API в WordPress и зачем создавать свои эндпоинты
REST API — это интерфейс, который позволяет приложениям взаимодействовать с сайтом через HTTP-запросы, передавая и получая данные в формате JSON. Стандартные маршруты покрывают основные типы данных: посты, страницы, таксономии, пользователи и т.д. Но если вам нужно реализовать индивидуальную логику, например, получить данные из нестандартных таблиц, агрегировать информацию или выполнять специфичные действия, создайте собственные маршруты.
Преимущества создания собственного REST API:
- Гибкость: можно возвращать любые данные и выполнять нужные операции.
- Интеграция: внешние сервисы смогут легко получать и отправлять данные на ваш сайт.
- Безопасность: можно настроить права доступа и проверять авторизацию.
- Производительность: оптимизировать ответы под конкретные задачи.
Теперь перейдем к практической части.
Регистрация собственного маршрута REST API в WordPress
Для начала создадим функцию, которая будет регистрировать новый маршрут. Используем хук rest_api_init, который вызывается при инициализации REST API.
add_action('rest_api_init', 'wplancer_register_custom_route');
function wplancer_register_custom_route() {
register_rest_route('wplancer/v1', '/hello/', array(
'methods' => 'GET',
'callback' => 'wplancer_hello_callback',
'permission_callback' => '__return_true', // разрешаем всем
));
}
function wplancer_hello_callback(WP_REST_Request $request) {
return array('message' => 'Привет от WPLancer REST API!');
}Здесь мы добавили маршрут /wp-json/wplancer/v1/hello/, который при GET-запросе возвращает простой JSON с сообщением. Параметр permission_callback отвечает за проверку прав доступа. В примере разрешаем доступ всем.
Тестирование нового маршрута
Чтобы проверить работу, откройте в браузере или с помощью curl следующий URL:
https://ваш-сайт.ru/wp-json/wplancer/v1/hello/Вы должны увидеть ответ:
{
"message": "Привет от WPLancer REST API!"
}Передача параметров и получение данных из запроса
Часто нужно принимать параметры от клиента. Например, добавим маршрут, который принимает имя и возвращает персональное приветствие.
add_action('rest_api_init', 'wplancer_register_greet_route');
function wplancer_register_greet_route() {
register_rest_route('wplancer/v1', '/greet/', array(
'methods' => 'GET',
'callback' => 'wplancer_greet_callback',
'args' => array(
'name' => array(
'required' => true,
'sanitize_callback' => 'sanitize_text_field',
'validate_callback' => function($param, $request, $key) {
return is_string($param) && !empty($param);
}
),
),
'permission_callback' => '__return_true',
));
}
function wplancer_greet_callback(WP_REST_Request $request) {
$name = $request->get_param('name');
return array('message' => 'Привет, ' . $name . '! Добро пожаловать в WPLancer REST API.');
}Теперь при запросе /wp-json/wplancer/v1/greet/?name=Иван вы получите персональное приветствие. Важно задавать в args параметры, чтобы WordPress сам проверял и очищал входные данные.
Обработка POST-запросов и получение данных тела запроса
REST API поддерживает различные HTTP-методы. Создадим маршрут, который принимает POST-запрос с JSON и сохраняет данные как новый пост.
add_action('rest_api_init', 'wplancer_register_create_post_route');
function wplancer_register_create_post_route() {
register_rest_route('wplancer/v1', '/create-post/', array(
'methods' => 'POST',
'callback' => 'wplancer_create_post_callback',
'permission_callback' => function() {
return current_user_can('edit_posts');
},
'args' => array(
'title' => array('required' => true, 'sanitize_callback' => 'sanitize_text_field'),
'content' => array('required' => true, 'sanitize_callback' => 'wp_kses_post'),
),
));
}
function wplancer_create_post_callback(WP_REST_Request $request) {
$title = $request->get_param('title');
$content = $request->get_param('content');
$post_id = wp_insert_post(array(
'post_title' => $title,
'post_content' => $content,
'post_status' => 'draft',
'post_author' => get_current_user_id(),
));
if (is_wp_error($post_id)) {
return new WP_Error('post_creation_failed', 'Ошибка при создании поста', array('status' => 500));
}
return array('success' => true, 'post_id' => $post_id);
}Обратите внимание на проверку прав доступа — только авторизованные пользователи с правом редактирования постов могут создавать новые записи через этот эндпоинт.
Безопасность и авторизация в собственном REST API
Очень важно правильно настроить авторизацию. Часто используют проверку nonce, OAuth, JWT или просто проверяют права пользователя через функции WordPress.
Пример проверки nonce:
function wplancer_permission_callback(WP_REST_Request $request) {
$nonce = $request->get_header('X-WP-Nonce');
if (!wp_verify_nonce($nonce, 'wp_rest')) {
return new WP_Error('forbidden', 'Неверный nonce', array('status' => 403));
}
return true;
}Вызов register_rest_route с таким permission_callback гарантирует, что доступ будет только у пользователей с валидным nonce.
Дополнительные советы по безопасности
- Используйте
current_user_can()для проверки прав. - Санитизируйте и валидируйте все входящие данные.
- Не раскрывайте подробности ошибок клиенту.
- Ограничивайте методы, разрешённые для маршрута.
Примеры полезных собственных маршрутов для вашего сайта на WordPress
Вот идеи, которые можно реализовать через собственный REST API:
- Получение списка заказов пользователя (если есть WooCommerce).
- Агрегация пользовательских данных из мета-полей.
- Выгрузка статистики посещений.
- Внедрение кастомной логики голосований или рейтингов.
- Интеграция с внешними CRM или ERP системами.
Каждый из этих маршрутов реализуется по аналогии с примерами выше: регистрируем маршрут, обрабатываем параметры и возвращаем JSON.
Заключение
Создание собственного REST API в WordPress — мощный инструмент для расширения возможностей вашего сайта. Это позволяет строить современные SPA, мобильные приложения и интегрировать сайт с внешними сервисами на профессиональном уровне. В статье рассмотрены базовые принципы, примеры кода и советы по безопасности, которые помогут вам начать разработку собственных маршрутов.