Что такое REST API в WordPress и зачем он нужен
REST API — это современный способ взаимодействия с WordPress через HTTP-запросы. С его помощью можно получать, создавать, обновлять и удалять данные сайта программно, что открывает широкие возможности для интеграции с внешними сервисами, мобильными приложениями или кастомными фронтендами. В отличие от классического подхода с PHP-шаблонами, REST API позволяет работать с данными в формате JSON, что значительно упрощает их обработку и передачу.
В WordPress уже встроен мощный REST API, который предоставляет доступ к стандартным типам записей (посты, страницы, пользователи и пр.). Однако часто требуется получить данные из кастомных полей или собственных таблиц. В этой статье мы рассмотрим, как расширить REST API и использовать его для получения нужной информации.
Понимание и умение работать с REST API будет полезно как фронтенд-разработчикам, так и бекенд-специалистам, которые хотят создавать более гибкие и масштабируемые решения на WordPress.
Как получить базовые данные через REST API WordPress
Для начала рассмотрим простой пример: получение списка постов блога через стандартный эндпоинт REST API. Для этого достаточно отправить GET-запрос на адрес:
https://example.com/wp-json/wp/v2/postsОтвет приходит в формате JSON и содержит массив объектов с информацией о постах (заголовок, дата, автор и др.). Вы можете использовать этот запрос в браузере, curl или в любом HTTP-клиенте.
Если необходимо получить конкретный пост по ID, запрос будет выглядеть так:
https://example.com/wp-json/wp/v2/posts/123Кроме постов, доступны другие стандартные типы данных: страницы (/wp/v2/pages), категории, теги и пользователи. Это удобный способ быстро получить данные без дополнительного программирования.
Расширение REST API для получения кастомных полей (ACF и не только)
Стандартный REST API не возвращает данные из произвольных полей (custom fields), что часто необходимо для кастомных тем и плагинов. Рассмотрим, как добавить эти поля в ответ API.
Добавление произвольных полей вручную
Допустим, у нас есть пользовательское поле wpnote_custom_field, и мы хотим, чтобы оно возвращалось вместе с данными поста. Для этого в файле функций темы (functions.php) или в своем плагине добавляем следующий код:
function wpnote_register_custom_fields() {
register_rest_field('post', 'custom_field', [
'get_callback' => function($post) {
return get_post_meta($post['id'], 'wpnote_custom_field', true);
},
'schema' => null,
]);
}
add_action('rest_api_init', 'wpnote_register_custom_fields');Теперь при запросе /wp-json/wp/v2/posts каждый объект поста будет содержать дополнительное поле custom_field с нужным значением. Таким образом можно добавлять любые свои метаданные.
Интеграция с Advanced Custom Fields (ACF)
Если вы используете плагин ACF, он предоставляет собственный способ добавить поля в REST API. Для этого нужно включить поддержку REST API в настройках ACF (опция «Show in REST API» для каждого поля) или использовать следующий код:
function wpnote_acf_to_rest_api() {
// добавляем все поля ACF к типу записи 'post'
register_rest_field('post', 'acf', [
'get_callback' => function($post) {
return get_fields($post['id']);
},
'schema' => null,
]);
}
add_action('rest_api_init', 'wpnote_acf_to_rest_api');После этого в JSON-ответе будет ключ acf с объектом всех пользовательских полей ACF. Это значительно упрощает работу с метаданными.
Создание собственного эндпоинта REST API: пример с выводом пользователей
Иногда стандартных эндпоинтов недостаточно, и требуется создать свой собственный, например, для вывода списка пользователей с определенными параметрами.
Вот пример, как это сделать:
function wpnote_register_custom_endpoint() {
register_rest_route('wpnote/v1', '/users/', [
'methods' => 'GET',
'callback' => 'wpnote_get_users',
'permission_callback' => function () {
return current_user_can('list_users');
}
]);
}
add_action('rest_api_init', 'wpnote_register_custom_endpoint');
function wpnote_get_users($request) {
$args = [
'role' => 'subscriber',
'number' => 10
];
$user_query = new WP_User_Query($args);
$users = [];
foreach ($user_query->get_results() as $user) {
$users[] = [
'ID' => $user->ID,
'display_name' => $user->display_name,
'email' => $user->user_email
];
}
return rest_ensure_response($users);
}Этот эндпоинт будет доступен по адресу /wp-json/wpnote/v1/users/ и вернет список подписчиков с их именами и email. В данном примере также реализована проверка прав доступа, что важно для безопасности.
Проверка и обработка параметров запроса в REST API
REST API позволяет принимать параметры через URL, что дает гибкость. Для примера расширим предыдущий эндпоинт, чтобы фильтровать пользователей по роли, передаваемой в запросе:
function wpnote_get_users($request) {
$role = $request->get_param('role') ?: 'subscriber';
$args = [
'role' => sanitize_text_field($role),
'number' => 10
];
$user_query = new WP_User_Query($args);
$users = [];
foreach ($user_query->get_results() as $user) {
$users[] = [
'ID' => $user->ID,
'display_name' => $user->display_name,
'email' => $user->user_email
];
}
return rest_ensure_response($users);
}Теперь можно сделать запрос /wp-json/wpnote/v1/users?role=editor и получить список редакторов. Важно всегда фильтровать и валидировать входные данные для безопасности.
Практические советы для работы с REST API в WordPress
При разработке с использованием REST API учтите несколько важных моментов:
- Кэширование. Частые запросы к API могут создавать нагрузку на сервер, поэтому используйте кэширование на уровне сервера или сторонние плагины.
- Безопасность. Всегда проверяйте права доступа в
permission_callback, особенно если API возвращает конфиденциальные данные. - Формат данных. Стандартно используется JSON, но при необходимости можно настроить другие форматы.
- Документация. Используйте плагины для генерации документации по своим кастомным эндпоинтам, например, WP REST API Controller.
- Отладка. Для проверки запросов удобно использовать Postman или аналогичные инструменты.
Заключение
REST API — мощный инструмент для расширения функционала WordPress и интеграции с внешними системами. В этой статье мы подробно рассмотрели, как получить данные через стандартные эндпоинты, как добавить пользовательские поля к ответу, создать собственный эндпоинт и работать с параметрами запроса. Приведенные примеры кода помогут быстро реализовать нужные задачи и сделать ваш сайт более гибким и современным.