REST API в WordPress — мощный инструмент для взаимодействия с сайтом через HTTP-запросы. Он позволяет получать, создавать, обновлять и удалять данные с сайта программно, что открывает широкие возможности для интеграций и создания динамичных приложений. В этой статье мы подробно разберём, как использовать REST API при создании собственного плагина на примере практического кода.
Что такое REST API в WordPress и зачем он нужен
REST API (Representational State Transfer Application Programming Interface) — это набор правил и стандартов, позволяющих клиенту (например, мобильному приложению или внешнему сайту) взаимодействовать с сервером через HTTP-запросы. В WordPress REST API встроен из коробки начиная с версии 4.7, что даёт разработчикам простой механизм для работы с контентом и настройками сайта.
Основные возможности REST API в WordPress:
- Получение данных: записи, страницы, таксономии, пользователи и т.д.;
- Создание, обновление и удаление контента через API;
- Создание собственных REST-эндпоинтов для работы с кастомными данными;
- Интеграция с внешними сервисами и приложениями.
Для разработчика плагинов REST API — это способ расширить функциональность сайта, предоставляя удобные интерфейсы для взаимодействия с данными.
Создание собственного REST API эндпоинта в плагине
Рассмотрим пошагово, как в плагине wplesson зарегистрировать новый REST эндпоинт, который будет возвращать список последних пяти записей с определённой категорией.
Регистрация маршрута и обработчика запроса
Добавьте в основной файл плагина следующий код:
add_action('rest_api_init', 'wplesson_register_custom_route');
function wplesson_register_custom_route() {
register_rest_route('wplesson/v1', '/latest-posts/', array(
'methods' => 'GET',
'callback' => 'wplesson_get_latest_posts',
'permission_callback' => '__return_true',
));
}Здесь мы создаём маршрут /wp-json/wplesson/v1/latest-posts/, который отвечает на GET-запросы и вызывает функцию wplesson_get_latest_posts.
Обработка запроса и возврат данных
Теперь реализуем функцию, которая будет отдавать JSON с нужными данными:
function wplesson_get_latest_posts(WP_REST_Request $request) {
$args = array(
'numberposts' => 5,
'category_name' => 'news', // замените на вашу категорию
'post_status' => 'publish',
);
$posts = get_posts($args);
$data = array();
foreach ($posts as $post) {
$data[] = array(
'id' => $post->ID,
'title' => get_the_title($post),
'date' => get_the_date('', $post),
'link' => get_permalink($post),
);
}
return rest_ensure_response($data);
}Эта функция получает последние 5 опубликованных записей из категории "news" и возвращает их в удобном формате.
Добавление параметров для фильтрации и пагинации
Чтобы API был более гибким, добавим возможность задавать параметры запроса — например, категорию и количество записей через URL.
Изменим регистрацию маршрута, добавив схему параметров:
register_rest_route('wplesson/v1', '/latest-posts/', array(
'methods' => 'GET',
'callback' => 'wplesson_get_latest_posts',
'permission_callback' => '__return_true',
'args' => array(
'category' => array(
'required' => false,
'type' => 'string',
),
'count' => array(
'required' => false,
'type' => 'integer',
'default' => 5,
),
),
));И доработаем функцию, чтобы учитывать эти параметры:
function wplesson_get_latest_posts(WP_REST_Request $request) {
$category = $request->get_param('category') ?: 'news';
$count = $request->get_param('count') ?: 5;
$args = array(
'numberposts' => $count,
'category_name' => sanitize_text_field($category),
'post_status' => 'publish',
);
$posts = get_posts($args);
$data = array();
foreach ($posts as $post) {
$data[] = array(
'id' => $post->ID,
'title' => get_the_title($post),
'date' => get_the_date('', $post),
'link' => get_permalink($post),
);
}
return rest_ensure_response($data);
}Теперь можно сделать запрос, например: /wp-json/wplesson/v1/latest-posts/?category=technology&count=3
Пример использования REST API в фронтенде
Чтобы использовать созданный API на клиентской стороне, можно написать простой JavaScript код, который получит данные и выведет их на страницу.
fetch('/wp-json/wplesson/v1/latest-posts/?category=news&count=5')
.then(response => response.json())
.then(data => {
const container = document.getElementById('wplesson-posts');
data.forEach(post => {
const div = document.createElement('div');
div.innerHTML = `<a href="${post.link}">${post.title}</a> <span>(${post.date})</span>`;
container.appendChild(div);
});
})
.catch(err => console.error(err));Для вывода создайте на странице элемент с id wplesson-posts. Такой подход позволяет динамически подгружать контент без перезагрузки.
Плагины для расширения возможностей REST API в WordPress
Если вы хотите упростить работу или добавить функциональность, существуют проверенные плагины:
- WP REST API Controller — позволяет управлять доступом к REST эндпоинтам, настраивать поля и права;
- Advanced Custom Fields (ACF) to REST API — расширяет API, добавляя поля ACF;
- JWT Authentication for WP REST API — добавляет поддержку авторизации через JWT токены для безопасного взаимодействия;
- WPGraphQL — альтернативный API с использованием GraphQL для более сложных запросов.
Использование этих плагинов поможет вам создавать более гибкие и защищённые решения на базе REST API.
Безопасность и права доступа при работе с REST API
При создании своих эндпоинтов важно задуматься о безопасности. По умолчанию наш пример использует 'permission_callback' => '__return_true', что открывает доступ всем. В реальном проекте стоит проверять права пользователя:
function wplesson_permission_check() {
return current_user_can('edit_posts');
}
register_rest_route('wplesson/v1', '/latest-posts/', array(
'methods' => 'GET',
'callback' => 'wplesson_get_latest_posts',
'permission_callback' => 'wplesson_permission_check',
));Такой подход гарантирует, что только авторизованные пользователи с правами редактирования смогут получить доступ к данным.
Выводы и рекомендации по использованию REST API в WordPress
REST API открывает огромные возможности для расширения функционала WordPress. Создавая собственные REST эндпоинты, вы можете интегрировать сайт с внешними сервисами, создавать SPA и мобильные приложения, а также автоматизировать управление контентом.
Главные рекомендации:
- Всегда проверяйте права доступа в
permission_callback; - Соблюдайте безопасность — фильтруйте и валидируйте входящие данные;
- Используйте возможности WordPress: функции
get_posts,rest_ensure_response, WP_REST_Request; - Тестируйте эндпоинты при помощи инструментов Postman или curl;
- Расширяйте API через плагины для удобства и безопасности.
Следуя этим советам, вы сможете создавать эффективные и безопасные решения на базе WordPress REST API, которые повысят ценность вашего сайта и расширят его возможности.