Современные веб-приложения всё чаще используют REST API для обмена данными между фронтендом и бэкендом. WordPress из коробки поддерживает REST API, но зачастую возникает необходимость создавать собственные эндпоинты для решения специфичных задач. В этой статье разберём, как создать и использовать REST API в WordPress, рассмотрим примеры кода и познакомимся с полезными плагинами.
Что такое REST API в WordPress и зачем он нужен
REST API (Representational State Transfer Application Programming Interface) — это архитектурный стиль взаимодействия компонентов по протоколу HTTP. В WordPress REST API позволяет получать, создавать, изменять и удалять данные сайта через HTTP-запросы в формате JSON.
Использование REST API особенно актуально при создании SPA (Single Page Application), мобильных приложений, интеграции с внешними сервисами и кастомизации административной панели.
WordPress предоставляет стандартные эндпоинты для работы с постами, пользователями, таксономиями и другими сущностями, но для уникальных бизнес-процессов часто требуется добавить собственные маршруты.
Создание собственного REST API эндпоинта в WordPress
Регистрация маршрута и обработчика запроса
Для регистрации собственного маршрута используется функция register_rest_route(). Ниже пример создания простого эндпоинта, который возвращает список последних 5 публикаций.
add_action('rest_api_init', 'wpai_register_custom_route');
function wpai_register_custom_route() {
register_rest_route('wpai/v1', '/latest-posts', array(
'methods' => 'GET',
'callback' => 'wpai_get_latest_posts',
'permission_callback' => '__return_true',
));
}
function wpai_get_latest_posts() {
$args = array(
'numberposts' => 5,
'post_status' => 'publish'
);
$posts = get_posts($args);
$data = array();
foreach ($posts as $post) {
$data[] = array(
'id' => $post->ID,
'title' => $post->post_title,
'date' => $post->post_date,
'link' => get_permalink($post->ID)
);
}
return rest_ensure_response($data);
}Этот код добавляет маршрут /wp-json/wpai/v1/latest-posts, который возвращает JSON с пятью последними постами.
Обработка параметров запроса
Чтобы сделать API более гибким, можно принимать параметры. Например, количество постов можно передавать через GET-параметр count. Расширим предыдущий пример:
function wpai_register_custom_route() {
register_rest_route('wpai/v1', '/latest-posts', array(
'methods' => 'GET',
'callback' => 'wpai_get_latest_posts',
'permission_callback' => '__return_true',
'args' => array(
'count' => array(
'required' => false,
'validate_callback' => function($param) {
return is_numeric($param) && $param > 0 && $param <= 20;
},
'default' => 5
)
)
));
}
function wpai_get_latest_posts(WP_REST_Request $request) {
$count = $request->get_param('count');
$args = array(
'numberposts' => $count,
'post_status' => 'publish'
);
$posts = get_posts($args);
$data = array();
foreach ($posts as $post) {
$data[] = array(
'id' => $post->ID,
'title' => $post->post_title,
'date' => $post->post_date,
'link' => get_permalink($post->ID)
);
}
return rest_ensure_response($data);
}Теперь запрос /wp-json/wpai/v1/latest-posts?count=10 вернёт 10 постов, а если параметр отсутствует — 5 по умолчанию.
Авторизация и безопасность REST API
Ограничение доступа к эндпоинтам
Важно контролировать, кто может использовать ваш API. В примерах выше мы использовали 'permission_callback' => '__return_true', что открывает доступ всем. Для ограниченного доступа можно использовать проверку прав пользователя.
Например, разрешить доступ только авторизованным пользователям с ролью администратора:
function wpai_permission_callback() {
return current_user_can('manage_options');
}
register_rest_route('wpai/v1', '/secure-data', array(
'methods' => 'GET',
'callback' => 'wpai_get_secure_data',
'permission_callback' => 'wpai_permission_callback',
));Таким образом API станет безопаснее, и только авторизованные администраторы смогут получить данные.
Использование nonce и токенов
Для AJAX-запросов из фронтенда WordPress часто рекомендует использовать nonce — специальные токены, чтобы защититься от CSRF-атак. При работе с REST API можно передавать nonce в заголовках или параметрах запросов и проверять их на сервере.
Полезные плагины для работы с REST API в WordPress
Для упрощения разработки и расширения функционала REST API существуют плагины:
- WP REST API Controller — позволяет управлять доступом к стандартным эндпоинтам без кода.
- Advanced Custom Fields (ACF) с дополнением ACF to REST API — выводит кастомные поля в JSON-ответах.
- JWT Authentication for WP REST API — добавляет аутентификацию через JSON Web Tokens.
Эти инструменты помогут быстро настроить и обезопасить ваш API, а также расширить возможности стандартного функционала.
Пример интеграции REST API с фронтендом на JavaScript
Рассмотрим простой пример, как получить данные с созданного нами эндпоинта и отобразить их на странице с помощью fetch и чистого JS.
fetch('/wp-json/wpai/v1/latest-posts?count=5')
.then(response => response.json())
.then(data => {
const container = document.getElementById('posts-container');
data.forEach(post => {
const postElem = document.createElement('div');
postElem.innerHTML = `<a href="${post.link}">${post.title}</a> <small>${post.date}</small>`;
container.appendChild(postElem);
});
})
.catch(error => console.error('Ошибка загрузки данных:', error));В HTML достаточно добавить контейнер:
<div id="posts-container"></div>Так вы легко сможете динамически загружать и выводить данные с WordPress через собственный REST API.