REST API — мощный инструмент WordPress, позволяющий взаимодействовать с сайтом через HTTP-запросы. Это открывает новые возможности для создания кастомных приложений, мобильных клиентов, SPA и расширений. В этой статье мы подробно рассмотрим, как использовать REST API в WordPress, создавать собственные эндпоинты, настраивать их и обеспечивать безопасность.
Что такое REST API в WordPress и зачем он нужен
WordPress REST API — это набор стандартных маршрутов и эндпоинтов, которые предоставляют доступ к данным сайта в формате JSON. Это позволяет получать, создавать, обновлять и удалять контент программно через HTTP-запросы.
REST API полезен, если вы хотите:
- Создать одностраничное приложение (SPA) на React, Vue или Angular, которое обращается к WordPress как к бекенду.
- Разработать мобильное приложение, получающее данные с сайта без полной загрузки страниц.
- Интегрировать WordPress с внешними сервисами, автоматизировать задачи.
- Добавить собственные REST-эндпоинты для кастомного функционала.
Начиная с версии 4.7, WordPress имеет встроенный REST API, который покрывает стандартные типы записей, пользователей, комментариев и таксономий.
Как создавать собственные эндпоинты REST API в WordPress
Часто стандартных маршрутов недостаточно, и нужно добавить свои. Для этого используется функция register_rest_route, которую нужно вызывать в хуке rest_api_init.
Например, создадим эндпоинт, который вернёт список последних 5 пользовательских отзывов, хранящихся в кастомном типе записи wp_pro_review.
add_action('rest_api_init', 'wp_pro_register_review_endpoint');
function wp_pro_register_review_endpoint() {
register_rest_route('wp-pro/v1', '/reviews', array(
'methods' => 'GET',
'callback' => 'wp_pro_get_reviews',
'permission_callback' => '__return_true',
));
}
function wp_pro_get_reviews() {
$args = array(
'post_type' => 'wp_pro_review',
'posts_per_page' => 5,
'post_status' => 'publish',
);
$query = new WP_Query($args);
$reviews = array();
if ($query->have_posts()) {
while ($query->have_posts()) {
$query->the_post();
$reviews[] = array(
'id' => get_the_ID(),
'title' => get_the_title(),
'content' => get_the_content(),
'date' => get_the_date('c'),
);
}
wp_reset_postdata();
}
return $reviews;
}Теперь запрос GET /wp-json/wp-pro/v1/reviews вернёт JSON с последними 5 отзывами.
Обработка параметров запроса
Можно принимать параметры, например, количество отзывов через GET-параметр count. Для этого добавим в register_rest_route схему аргументов.
register_rest_route('wp-pro/v1', '/reviews', array(
'methods' => 'GET',
'callback' => 'wp_pro_get_reviews',
'permission_callback' => '__return_true',
'args' => array(
'count' => array(
'required' => false,
'default' => 5,
'validate_callback' => function($param, $request, $key) {
return is_numeric($param) && $param > 0 && $param <= 20;
}
),
),
));
function wp_pro_get_reviews(WP_REST_Request $request) {
$count = (int) $request->get_param('count');
$args = array(
'post_type' => 'wp_pro_review',
'posts_per_page' => $count,
'post_status' => 'publish',
);
$query = new WP_Query($args);
$reviews = array();
if ($query->have_posts()) {
while ($query->have_posts()) {
$query->the_post();
$reviews[] = array(
'id' => get_the_ID(),
'title' => get_the_title(),
'content' => get_the_content(),
'date' => get_the_date('c'),
);
}
wp_reset_postdata();
}
return $reviews;
}Работа с безопасностью и аутентификацией в REST API
По умолчанию публичные эндпоинты доступны всем, но для изменения данных или получения приватной информации нужно реализовать проверку прав пользователя.
Для этого в permission_callback возвращают true или false в зависимости от прав. Например, чтобы разрешить доступ только администраторам:
function wp_pro_permission_check() {
return current_user_can('manage_options');
}
register_rest_route('wp-pro/v1', '/secure-data', array(
'methods' => 'GET',
'callback' => 'wp_pro_get_secure_data',
'permission_callback' => 'wp_pro_permission_check',
));Для аутентификации можно использовать cookie, nonce или внешние методы (OAuth, JWT). Популярный плагин для JWT — JWT Authentication for WP REST API.
Полезные плагины для работы с REST API в WordPress
Для упрощения разработки и расширения возможностей REST API рекомендую следующие плагины:
- WP REST API Controller — позволяет управлять доступом к стандартным эндпоинтам и полям через удобный интерфейс.
- Advanced Custom Fields (ACF) to REST API — добавляет данные ACF в REST API, что очень удобно для кастомных полей.
- JWT Authentication for WP REST API — обеспечивает поддержку JWT токенов для безопасной аутентификации.
Пример расширения REST API для кастомных полей ACF
Если у вас есть кастомные поля, созданные через ACF, и вы хотите, чтобы они отображались в REST API, используйте следующий код:
add_action('rest_api_init', function () {
register_rest_field('post', 'wp_pro_custom_field', array(
'get_callback' => function ($post) {
return get_field('wp_pro_custom_field', $post['id']);
},
'schema' => array(
'description' => 'Кастомное поле от ACF',
'type' => 'string',
),
));
});Это позволит при запросе GET /wp-json/wp/v2/posts видеть в ответе поле wp_pro_custom_field.
Отладка и тестирование REST API в WordPress
Для проверки ваших эндпоинтов используйте инструменты типа Postman, Insomnia или встроенную консоль браузера. Также полезно включить логирование ошибок и использовать плагин Query Monitor для выявления проблем.
Не забывайте использовать правильные заголовки, например Content-Type: application/json и передавать данные в формате JSON при POST/PUT запросах.
Заключение
WordPress REST API — ключевой инструмент для современного развития сайтов и приложений. Создание собственных эндпоинтов позволяет реализовать уникальный функционал и интеграции. Обязательно учитывайте безопасность и используйте подходящие методы аутентификации. Надеюсь, приведённые примеры и рекомендации помогут вам успешно работать с REST API на вашем сайте.