REST API в WordPress — мощный инструмент, позволяющий взаимодействовать с сайтом программно, что открывает широкие возможности для автоматизации рутинных задач, интеграции с внешними сервисами и создания кастомных приложений. В этой статье подробно разберём, как правильно использовать REST API в WordPress на практике, рассмотрим примеры запросов и создадим собственные REST API эндпоинты.
Что такое REST API в WordPress и зачем он нужен
REST API — это интерфейс прикладного программирования, который позволяет отправлять и получать данные с сайта через HTTP-запросы в формате JSON. В WordPress REST API доступен из коробки с версии 4.7 и позволяет управлять постами, страницами, пользователями, комментариями и другими сущностями.
Это особенно полезно для разработчиков, которые хотят создать мобильные приложения, одностраничные приложения (SPA), автоматизировать задачи или интегрировать сайт с внешними сервисами, например с CRM или системами аналитики.
Основные возможности REST API в WordPress:
- Получение, создание, обновление и удаление контента (CRUD операции).
- Работа с пользовательскими типами постов и метаданными.
- Аутентификация и управление доступом.
- Расширение функциональности через создание собственных эндпоинтов.
Как выполнять базовые запросы к REST API WordPress
Все REST API запросы в WordPress начинаются с базового URL: https://your-site.com/wp-json/wp/v2/. Например, чтобы получить список последних 5 постов, нужно отправить GET-запрос на /wp-json/wp/v2/posts?per_page=5.
Пример запроса с помощью fetch в JavaScript:
fetch('https://wpbuy.ru/wp-json/wp/v2/posts?per_page=5')
.then(response => response.json())
.then(data => console.log(data));
Ответ — массив объектов с данными постов, включая заголовок, содержимое, дату публикации и другие поля.
Для создания или редактирования контента нужна аутентификация — чаще всего через JWT или cookie авторизации.
Пример создания нового поста через REST API
Для примера рассмотрим создание поста с помощью PHP и функции wpbuy_restapi_create_post:
function wpbuy_restapi_create_post() {
$response = wp_remote_post('https://wpbuy.ru/wp-json/wp/v2/posts', [
'headers' => [
'Authorization' => 'Bearer YOUR_JWT_TOKEN',
'Content-Type' => 'application/json',
],
'body' => json_encode([
'title' => 'Новый пост через REST API',
'content' => 'Содержимое поста',
'status' => 'publish'
])
]);
if (is_wp_error($response)) {
return $response->get_error_message();
}
return json_decode(wp_remote_retrieve_body($response));
}В этом примере мы отправляем POST-запрос с заголовком авторизации и JSON телом, указывая заголовок, содержание и статус поста.
Создание кастомного REST API эндпоинта в WordPress
Иногда стандартных эндпоинтов недостаточно, и нужно расширить API своими методами. Рассмотрим создание собственного эндпоинта, который возвращает список последних 3 продуктов с дополнительными полями.
Добавим следующий код в файл functions.php вашей темы или в плагин:
add_action('rest_api_init', function() {
register_rest_route('wpbuy/v1', '/latest-products', [
'methods' => 'GET',
'callback' => 'wpbuy_restapi_get_latest_products',
'permission_callback' => '__return_true',
]);
});
function wpbuy_restapi_get_latest_products(WP_REST_Request $request) {
$args = [
'post_type' => 'product',
'posts_per_page' => 3,
'post_status' => 'publish',
];
$query = new WP_Query($args);
$products = [];
while ($query->have_posts()) {
$query->the_post();
$products[] = [
'id' => get_the_ID(),
'title' => get_the_title(),
'price' => get_post_meta(get_the_ID(), '_price', true),
'link' => get_permalink(),
];
}
wp_reset_postdata();
return $products;
}Теперь запрос https://wpbuy.ru/wp-json/wpbuy/v1/latest-products вернёт JSON с 3 последними продуктами и их ценами.
Обеспечение безопасности и аутентификации
Для публичных данных можно не использовать аутентификацию, но для изменения данных следует обязательно добавлять проверки прав доступа в permission_callback. В примере выше функция __return_true разрешает всем доступ, что не подходит для приватных данных.
Рекомендуется использовать JWT (JSON Web Token) плагин или стандартную cookie авторизацию WordPress для защищённых запросов.
Практическое применение REST API для автоматизации на wpbuy.ru
На сайте wpbuy.ru можно использовать REST API для ряда полезных задач:
- Автоматическая публикация и обновление обзоров продуктов через внешние скрипты.
- Интеграция с CRM для передачи заказов и комментариев.
- Создание мобильного приложения, использующего данные сайта.
- Автоматическое создание кастомных записей с помощью внешних сервисов.
Если вы используете плагин Expert Review, REST API позволит получать отзывы и оценки продуктов программно для отображения в других системах.
Пример автоматического обновления статуса продукта через REST API и WP-Cron
Можно настроить WP-Cron задачу, которая раз в час проверяет состояние продукта и обновляет его статус через REST API:
function wpbuy_cron_update_products() {
$products = [123, 456, 789]; // ID продуктов
foreach ($products as $product_id) {
$response = wp_remote_post('https://wpbuy.ru/wp-json/wp/v2/product/' . $product_id, [
'headers' => [
'Authorization' => 'Bearer YOUR_JWT_TOKEN',
'Content-Type' => 'application/json',
],
'body' => json_encode(['status' => 'private']),
]);
if (is_wp_error($response)) {
error_log('Ошибка обновления продукта: ' . $product_id);
}
}
}
add_action('wp_scheduled_event', 'wpbuy_cron_update_products');Это позволит автоматически управлять видимостью продуктов без ручного вмешательства.
Заключение
REST API — незаменимый инструмент для разработчиков WordPress, который открывает широкие возможности для интеграций и автоматизации. Важно правильно организовать аутентификацию и безопасность, а также грамотно проектировать собственные эндпоинты для максимальной эффективности.
Для более глубокого изучения советую ознакомиться с официальной документацией WordPress REST API и использовать готовые решения, например, плагины из магазина WPSHOP.