WordPress давно перестал быть просто блоговой платформой — сегодня это мощная CMS, позволяющая строить сложные веб-приложения и интеграции. Одним из ключевых инструментов для этого является REST API, который позволяет взаимодействовать с сайтом через HTTP-запросы, создавая гибкие и масштабируемые решения.
Что такое REST API в WordPress и зачем он нужен
REST API — это набор стандартных интерфейсов для работы с данными сайта по протоколу HTTP. В WordPress он встроен из коробки, начиная с версии 4.7. Благодаря REST API можно:
- Создавать мобильные приложения, использующие данные сайта.
- Интегрировать WordPress с внешними сервисами и CRM.
- Строить одностраничные приложения (SPA) на React, Vue или Angular с использованием WordPress как бекенда.
- Расширять функционал сайта без изменения ядра через собственные REST маршруты.
Однако базового API недостаточно для сложных задач — часто требуется создавать собственные эндпоинты или расширять стандартные.
Создание собственного REST API эндпоинта в WordPress
Для примера рассмотрим, как зарегистрировать новый маршрут, который возвращает список последних новостей с дополнительными метаданными.
Регистрация маршрута и обработчика запроса
В functions.php вашей темы или в отдельном плагине добавьте следующий код:
add_action('rest_api_init', 'wpmail_register_news_endpoint');
function wpmail_register_news_endpoint() {
register_rest_route('wpmail/v1', '/news/', array(
'methods' => 'GET',
'callback' => 'wpmail_get_latest_news',
'permission_callback' => '__return_true',
));
}
function wpmail_get_latest_news(WP_REST_Request $request) {
$args = array(
'post_type' => 'post',
'posts_per_page' => 5,
'orderby' => 'date',
'order' => 'DESC',
);
$query = new WP_Query($args);
$news = array();
while ($query->have_posts()) {
$query->the_post();
$news[] = array(
'id' => get_the_ID(),
'title' => get_the_title(),
'date' => get_the_date('c'),
'excerpt' => get_the_excerpt(),
'custom_meta' => get_post_meta(get_the_ID(), 'wpmail_custom_meta', true),
);
}
wp_reset_postdata();
return rest_ensure_response($news);
}Этот код создает маршрут /wp-json/wpmail/v1/news/, который возвращает JSON с пятью последними постами и кастомным метаполем wpmail_custom_meta.
Тестирование и использование
Чтобы проверить работу, откройте в браузере или используйте Postman запрос:
https://your-site.ru/wp-json/wpmail/v1/news/
Вы получите структурированный JSON с нужными данными, готовыми для использования в приложении.
Расширение стандартных REST API эндпоинтов: добавление пользовательских полей
Стандартный API возвращает не все метаданные. Чтобы добавить свои поля, можно использовать фильтр register_rest_field. Например, добавим поле wpmail_custom_meta к ответу поста.
add_action('rest_api_init', 'wpmail_add_custom_meta_to_post');
function wpmail_add_custom_meta_to_post() {
register_rest_field('post', 'wpmail_custom_meta', array(
'get_callback' => 'wpmail_get_post_custom_meta',
'schema' => null,
));
}
function wpmail_get_post_custom_meta($object) {
return get_post_meta($object['id'], 'wpmail_custom_meta', true);
}Теперь при запросе /wp-json/wp/v2/posts в ответе у каждого поста появится новое поле с вашим метаданным.
Практические советы при создании REST API для WordPress
Безопасность и права доступа
Не забывайте о permission_callback. Для публичных данных можно использовать __return_true, но для защищенных — реализуйте проверку прав, например:
function wpmail_check_user_permissions() {
return current_user_can('edit_posts');
}И зарегистрируйте маршрут так:
register_rest_route('wpmail/v1', '/private-data/', array(
'methods' => 'GET',
'callback' => 'wpmail_get_private_data',
'permission_callback' => 'wpmail_check_user_permissions',
));Кэширование результатов
Чтобы снизить нагрузку, используйте кэширование с помощью Transients API или внешних кеш-систем. Например:
function wpmail_get_cached_news() {
$cached = get_transient('wpmail_latest_news');
if ($cached !== false) {
return $cached;
}
$news = wpmail_get_latest_news(new WP_REST_Request());
set_transient('wpmail_latest_news', $news, 10 * MINUTE_IN_SECONDS);
return $news;
}Использование готовых плагинов для расширения REST API
Если не хочется писать код с нуля, можно использовать плагины:
- WP REST API Controller — удобный интерфейс для управления полями и эндпоинтами без кода.
- Advanced Custom Fields to REST API — добавляет поля ACF в REST ответы.
- JWT Authentication for WP REST API — добавляет поддержку JWT для авторизации через API.
Эти инструменты помогают быстро адаптировать API под конкретные задачи.
Интеграция REST API WordPress с внешними сервисами
REST API упрощает интеграцию с CRM, мобильными приложениями, фронтенд-решениями. Например, для интеграции с CRM можно отправлять запросы на создание клиентов и заказы, используя POST-запросы к своим кастомным эндпоинтам.
Пример отправки POST-запроса на создание записи через свой API:
fetch('https://your-site.ru/wp-json/wpmail/v1/create-order/', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer YOUR_JWT_TOKEN'
},
body: JSON.stringify({
customer_name: 'Иван Иванов',
product_id: 123,
quantity: 2
})
})
.then(response => response.json())
.then(data => console.log(data));На стороне WordPress нужно реализовать эндпоинт с проверкой авторизации и сохранением данных.
Заключение
Построение REST API в WordPress — мощный способ расширить возможности сайта, интегрироваться с внешними сервисами и создавать современные приложения. Понимание базовых принципов, умение создавать собственные эндпоинты и правильно настраивать безопасность позволит реализовать практически любые задачи. Используйте примеры из этой статьи как отправную точку для своих проектов на wpmail.ru.