В последние годы REST API стал неотъемлемой частью современного WordPress, открывая новые горизонты для разработки кастомных приложений и интеграций. В этой статье мы подробно разберем, как использовать REST API WordPress для создания собственных приложений, расширения функционала сайта и интеграции с внешними сервисами.
Что такое REST API в WordPress и зачем он нужен
REST API — это интерфейс программирования приложений, который позволяет взаимодействовать с сайтом WordPress через HTTP-запросы. Благодаря REST API можно получать, создавать, обновлять и удалять данные сайта — записи, страницы, пользователи и многое другое — программно, без необходимости работать с админкой.
Основные преимущества использования REST API:
- Создание одностраничных приложений (SPA) на React, Vue или Angular, которые общаются с WordPress как с бекендом.
- Интеграция сайта с мобильными приложениями.
- Автоматизация управления контентом через сторонние сервисы.
- Расширение стандартных эндпоинтов кастомными для специфических задач.
Как работать с базовыми эндпоинтами WordPress REST API
По умолчанию WordPress предоставляет набор стандартных REST API эндпоинтов, например:
/wp-json/wp/v2/posts— для работы с записями./wp-json/wp/v2/pages— для страниц./wp-json/wp/v2/users— для пользователей.
Давайте рассмотрим пример получения списка последних 5 записей через fetch в JavaScript:
fetch('https://wpmentor.ru/wp-json/wp/v2/posts?per_page=5')
.then(response => response.json())
.then(posts => {
posts.forEach(post => {
console.log(post.title.rendered);
});
});Для создания новой записи требуется авторизация и отправка POST-запроса с необходимыми полями.
Пример создания записи через REST API с использованием Basic Auth
Для тестирования можно использовать плагин Application Passwords, который позволяет создавать пароли для REST API.
fetch('https://wpmentor.ru/wp-json/wp/v2/posts', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Basic ' + btoa('username:application_password')
},
body: JSON.stringify({
title: 'Тестовая запись через REST API',
content: 'Содержимое записи',
status: 'publish'
})
})
.then(response => response.json())
.then(data => console.log(data));Создание кастомных эндпоинтов REST API в WordPress
Часто стандартных эндпоинтов недостаточно, и нужно создать собственные для реализации специфической логики. Для этого используется функция register_rest_route.
Рассмотрим простой пример создания кастомного маршрута, который возвращает список популярных постов:
add_action('rest_api_init', function () {
register_rest_route('wpmentor/v1', '/popular-posts/', [
'methods' => 'GET',
'callback' => 'wpmentor_get_popular_posts',
]);
});
function wpmentor_get_popular_posts() {
$args = [
'posts_per_page' => 5,
'meta_key' => 'post_views_count',
'orderby' => 'meta_value_num',
'order' => 'DESC'
];
$query = new WP_Query($args);
$posts = [];
foreach ($query->posts as $post) {
$posts[] = [
'id' => $post->ID,
'title' => get_the_title($post->ID),
'views' => get_post_meta($post->ID, 'post_views_count', true),
];
}
return $posts;
}Этот код регистрирует эндпоинт /wp-json/wpmentor/v1/popular-posts/, который возвращает JSON с пятью постами, отсортированными по количеству просмотров.
Добавление параметров в кастомные эндпоинты
Мы можем расширить функционал, добавив параметры запроса. Например, фильтрация по категории:
add_action('rest_api_init', function () {
register_rest_route('wpmentor/v1', '/popular-posts/', [
'methods' => 'GET',
'callback' => 'wpmentor_get_popular_posts',
'args' => [
'category' => [
'validate_callback' => function($param) {
return is_numeric($param);
}
]
]
]);
});
function wpmentor_get_popular_posts(WP_REST_Request $request) {
$category = $request->get_param('category');
$args = [
'posts_per_page' => 5,
'meta_key' => 'post_views_count',
'orderby' => 'meta_value_num',
'order' => 'DESC'
];
if ($category) {
$args['cat'] = intval($category);
}
$query = new WP_Query($args);
$posts = [];
foreach ($query->posts as $post) {
$posts[] = [
'id' => $post->ID,
'title' => get_the_title($post->ID),
'views' => get_post_meta($post->ID, 'post_views_count', true),
];
}
return $posts;
}Полезные плагины для работы с REST API в WordPress
Для удобства разработки и тестирования REST API рекомендуем обратить внимание на следующие плагины:
- Application Passwords — позволяет создавать пароли пользователя для авторизации в REST API без необходимости вводить логин и пароль.
- WP REST API Controller — визуально настраивает доступные эндпоинты и поля в API.
- REST API Log — логирует все запросы к REST API, что удобно для отладки.
Используя эти инструменты, вы сможете существенно упростить интеграцию и разработку.
Безопасность и авторизация при работе с REST API
Очень важно помнить, что многие методы REST API требуют авторизации, особенно если речь идет о создании, обновлении или удалении данных. WordPress поддерживает несколько способов авторизации:
- Cookie-based (используется в админке).
- OAuth 1.0a (сложно настроить, редко применяется).
- Basic Auth (подходит для тестирования, не рекомендуется на продакшене без HTTPS).
- Application Passwords — рекомендуемый способ для API.
Также можно реализовать собственные механизмы авторизации и проверки прав доступа в кастомных эндпоинтах, используя возможности класса WP_REST_Request и хуков.
Пример проверки прав в кастомном эндпоинте
register_rest_route('wpmentor/v1', '/secure-data/', [
'methods' => 'GET',
'callback' => 'wpmentor_get_secure_data',
'permission_callback' => function() {
return current_user_can('edit_posts');
}
]);
function wpmentor_get_secure_data() {
return ['data' => 'Секретная информация'];
}Таким образом, доступ к эндпоинту получат только пользователи с правом редактирования записей.
Практическое применение REST API WordPress: интеграция с внешним React приложением
Рассмотрим кратко пример, как можно использовать REST API для создания фронтенда на React, который будет подгружать и отображать записи с сайта.
В React компоненте можно сделать так:
import React, { useEffect, useState } from 'react';
function PostsList() {
const [posts, setPosts] = useState([]);
useEffect(() => {
fetch('https://wpmentor.ru/wp-json/wp/v2/posts?per_page=10')
.then(res => res.json())
.then(data => setPosts(data));
}, []);
return (
<div>
<h2>Список последних записей</h2>
<ul>
{posts.map(post => (
<li key={post.id} dangerouslySetInnerHTML={{ __html: post.title.rendered }} />
))}
</ul>
</div>
);
}
export default PostsList;Таким образом, можно легко создавать интерактивные, быстрые интерфейсы, используя WordPress как надежный бекенд.
Заключение
REST API WordPress — мощный инструмент для разработчиков, позволяющий создавать гибкие, кастомные решения и интеграции. Освоив работу с базовыми и кастомными эндпоинтами, а также обеспечив безопасность, вы сможете создавать современные приложения и расширять возможности вашего сайта.