REST API в WordPress — мощный инструмент, который позволяет взаимодействовать с сайтом через HTTP-запросы. С его помощью можно создавать новые функции, интегрировать внешние сервисы, строить сложные интерфейсы и управлять данными сайта без необходимости заходить в админку. В этой статье мы подробно разберём, как использовать REST API для создания кастомных функций, рассмотрим примеры кода и полезные практические советы.
Что такое REST API в WordPress и зачем он нужен
REST API (Representational State Transfer Application Programming Interface) — это набор правил и стандартов для взаимодействия между клиентом и сервером по протоколу HTTP. В WordPress он встроен с версии 4.7 и открывает доступ к данным сайта в формате JSON.
Основные возможности REST API WordPress:
- Получение данных (посты, страницы, пользователи, комментарии и т.д.)
- Создание, обновление и удаление содержимого сайта программно
- Интеграция с внешними приложениями и сервисами
- Создание кастомных эндпоинтов для расширения функционала
Используя REST API, разработчик может строить одностраничные приложения (SPA), мобильные приложения или создавать кастомные административные панели.
Создание кастомного эндпоинта REST API в WordPress
Регистрация собственного маршрута
Для создания кастомного эндпоинта нужно зарегистрировать маршрут с помощью функции register_rest_route. Сделаем пример, где мы добавим эндпоинт, возвращающий список последних 5 постов с дополнительным полем.
add_action('rest_api_init', function () {
register_rest_route('wppremium/v1', '/latest-posts/', array(
'methods' => 'GET',
'callback' => 'wppremium_get_latest_posts',
'permission_callback' => '__return_true',
));
});
function wppremium_get_latest_posts($request) {
$args = array(
'numberposts' => 5,
'post_status' => 'publish'
);
$recent_posts = wp_get_recent_posts($args);
foreach ($recent_posts as &$post) {
$post['custom_field'] = get_post_meta($post['ID'], 'custom_field_key', true);
}
return rest_ensure_response($recent_posts);
}В этом примере мы создали маршрут /wp-json/wppremium/v1/latest-posts/, который возвращает последние 5 опубликованных записей с дополнительным метаполем custom_field. Функция разрешает доступ всем, но в реальных случаях стоит реализовать проверку прав.
Обработка параметров запроса
Для гибкости добавим возможность указать количество постов через параметр count. Для этого нужно определить args в register_rest_route и обработать параметр:
add_action('rest_api_init', function () {
register_rest_route('wppremium/v1', '/latest-posts/', array(
'methods' => 'GET',
'callback' => 'wppremium_get_latest_posts',
'permission_callback' => '__return_true',
'args' => array(
'count' => array(
'validate_callback' => function($param, $request, $key) {
return is_numeric($param) && $param > 0 && $param <= 20;
},
'default' => 5
),
),
));
});
function wppremium_get_latest_posts($request) {
$count = (int) $request->get_param('count');
$args = array(
'numberposts' => $count,
'post_status' => 'publish'
);
$recent_posts = wp_get_recent_posts($args);
foreach ($recent_posts as &$post) {
$post['custom_field'] = get_post_meta($post['ID'], 'custom_field_key', true);
}
return rest_ensure_response($recent_posts);
}Теперь можно запрашивать /wp-json/wppremium/v1/latest-posts/?count=10 и получать нужное количество записей.
Примеры практического использования кастомных REST API эндпоинтов
1. Создание формы обратной связи с AJAX и REST API
Можно реализовать форму обратной связи, которая отправляет данные через REST API, а сервер сохраняет их как пользовательский тип записи или отправляет на почту.
Пример регистрации эндпоинта для приёма данных формы:
add_action('rest_api_init', function () {
register_rest_route('wppremium/v1', '/contact/', array(
'methods' => 'POST',
'callback' => 'wppremium_handle_contact_form',
'permission_callback' => '__return_true',
'args' => array(
'name' => array('required' => true),
'email' => array('required' => true),
'message' => array('required' => true),
),
));
});
function wppremium_handle_contact_form($request) {
$params = $request->get_params();
$name = sanitize_text_field($params['name']);
$email = sanitize_email($params['email']);
$message = sanitize_textarea_field($params['message']);
if (!is_email($email)) {
return new WP_Error('invalid_email', 'Неверный email', array('status' => 400));
}
$post_id = wp_insert_post(array(
'post_title' => 'Сообщение от: ' . $name,
'post_content' => $message,
'post_type' => 'contact_message',
'post_status' => 'publish'
));
if (is_wp_error($post_id)) {
return new WP_Error('insert_failed', 'Ошибка сохранения сообщения', array('status' => 500));
}
add_post_meta($post_id, 'email', $email);
return rest_ensure_response(array('success' => true, 'message' => 'Сообщение отправлено'));
}Для этого создайте CPT contact_message (через плагин или код) и подключите AJAX-запросы на фронтенде.
2. Интеграция с внешними сервисами
С помощью REST API можно настроить двусторонний обмен данными. Например, получить из внешнего CRM список клиентов и синхронизировать с пользователями WordPress, или наоборот — отправить данные о заказах из WooCommerce.
Для таких задач создайте отдельные эндпоинты с проверкой аутентификации (OAuth, JWT или nonce), чтобы обеспечить безопасность.
Обеспечение безопасности при работе с REST API
Поскольку REST API открывает доступ к данным через HTTP, важно правильно настроить права доступа и проверку запросов.
Основные рекомендации:
- Используйте параметр
permission_callbackдля проверки прав пользователя или аутентификации - Санитизируйте и валидируйте все входящие данные
- Не открывайте эндпоинты с возможностью записи без проверки
- Рассмотрите использование плагинов для авторизации через JWT или OAuth
Пример проверки прав по роли:
'permission_callback' => function () {
return current_user_can('edit_posts');
}Полезные плагины для работы с REST API в WordPress
- WP REST API Controller — удобный интерфейс для управления доступом и настройками REST API для стандартных и кастомных типов записей.
- JWT Authentication for WP REST API — добавляет поддержку JWT-токенов для безопасной аутентификации в API.
- Advanced Custom Fields (ACF) — с дополнением ACF to REST API позволяет выводить кастомные поля через API.
Эти инструменты значительно облегчают разработку и расширение функционала через REST API, особенно если вы не хотите писать много кода вручную.
Подведение итогов и рекомендации по использованию REST API
REST API — гибкий и мощный инструмент WordPress для расширения возможностей сайта и интеграции с внешним миром. Создавая кастомные эндпоинты, вы получаете полный контроль над тем, какие данные и как передаются, а также можете создавать удобные интерфейсы и приложения.
Всегда тщательно продумывайте логику проверки прав и безопасность, чтобы не допустить утечек и несанкционированных действий.
Практикуйтесь в создании простых эндпоинтов, постепенно усложняя задачи. Это поможет вам освоить REST API и использовать его на полную мощность в своих проектах на WordPress.