REST API — мощный инструмент WordPress, позволяющий получать данные сайта в формате JSON для использования на внешних ресурсах. В этой статье мы подробно разберём, как создать удалённый вывод постов WordPress через REST API, настроить выборку данных, добавить свои поля и обеспечить безопасность. Также рассмотрим практические примеры кода и полезные плагины для расширения функционала.
Что такое REST API в WordPress и зачем он нужен
REST API — это интерфейс программирования приложений, который позволяет отправлять HTTP-запросы к сайту WordPress и получать данные в формате JSON. Благодаря этому можно создавать мобильные приложения, интеграции, виджеты и другие внешние сервисы, которые используют контент сайта без прямого доступа к базе данных или админке.
Основные возможности REST API в WordPress:
- Получение списка постов, страниц, категорий, тегов и других таксономий;
- Создание, обновление и удаление контента (при наличии прав);
- Аутентификация и безопасный обмен данными;
- Расширение стандартных эндпоинтов своими параметрами и полями.
По умолчанию WordPress уже предоставляет стандартные эндпоинты для основных типов записей, но часто требуется настроить их под свои задачи.
Настройка вывода постов через REST API: что нужно знать
Стандартный эндпоинт для вывода постов выглядит так:
https://ваш-сайт.ru/wp-json/wp/v2/posts
Этот запрос возвращает список публикаций с полями, которые по умолчанию доступны. Но зачастую нужно:
- Выводить дополнительные пользовательские поля (custom fields);
- Фильтровать посты по своим параметрам;
- Изменять формат вывода;
- Добавлять свои эндпоинты для особых задач.
Для этого придется писать свой код в файле functions.php или создавать небольшой плагин.
Добавление пользовательских полей в ответ REST API
Допустим, у вас есть пользовательское поле ACF с ключом wpstandart_custom_info, и вы хотите, чтобы оно отображалось в ответе API.
Добавим следующий код:
add_action('rest_api_init', function () {
register_rest_field('post', 'wpstandart_custom_info', [
'get_callback' => 'wpstandart_get_custom_info',
'schema' => null,
]);
});
function wpstandart_get_custom_info($object) {
return get_post_meta($object['id'], 'wpstandart_custom_info', true);
}Теперь при запросе /wp-json/wp/v2/posts в каждом посте появится поле wpstandart_custom_info с нужными данными.
Фильтрация постов по пользовательскому полю через REST API
По умолчанию фильтрация по метаданным в REST API не включена. Добавим возможность фильтровать посты по ключу wpstandart_custom_info.
add_filter('rest_post_query', 'wpstandart_filter_rest_post_query', 10, 2);
function wpstandart_filter_rest_post_query($args, $request) {
if (!empty($request['wpstandart_custom_info'])) {
$args['meta_query'] = [
[
'key' => 'wpstandart_custom_info',
'value' => sanitize_text_field($request['wpstandart_custom_info']),
'compare' => '=',
]
];
}
return $args;
}<Теперь можно делать запросы вида:
https://ваш-сайт.ru/wp-json/wp/v2/posts?wpstandart_custom_info=значение
И получать только нужные посты.
Создание собственного эндпоинта для специфических задач
Если стандартных возможностей REST API недостаточно, можно создать свой собственный эндпоинт. Например, сделаем эндпоинт, возвращающий последние 5 опубликованных постов с определённым форматом вывода.
add_action('rest_api_init', function () {
register_rest_route('wpstandart/v1', '/latest-posts', [
'methods' => 'GET',
'callback' => 'wpstandart_get_latest_posts',
'permission_callback' => '__return_true',
]);
});
function wpstandart_get_latest_posts($request) {
$args = [
'post_type' => 'post',
'posts_per_page' => 5,
'post_status' => 'publish'
];
$query = new WP_Query($args);
$posts = [];
if ($query->have_posts()) {
while ($query->have_posts()) {
$query->the_post();
$posts[] = [
'id' => get_the_ID(),
'title' => get_the_title(),
'excerpt' => get_the_excerpt(),
'date' => get_the_date('c'),
'custom_info' => get_post_meta(get_the_ID(), 'wpstandart_custom_info', true),
];
}
wp_reset_postdata();
}
return $posts;
}Данный эндпоинт будет доступен по адресу /wp-json/wpstandart/v1/latest-posts и выводить 5 последних постов с нужными полями.
Обеспечение безопасности и оптимизация запросов REST API
При работе с REST API важно учитывать безопасность. Если ваши эндпоинты позволяют изменять данные, обязательна аутентификация и проверка прав пользователя. В нашем случае с выводом постов это не требуется, но для приватных данных следует использовать nonce или OAuth.
Также стоит ограничивать количество выводимых записей, чтобы не перегружать сервер. В стандартных эндпоинтах можно использовать параметр per_page, но с разумным лимитом, например 10 или 20.
Для удобства и расширенных настроек можно использовать плагин Clearfy Pro, который помогает оптимизировать REST API и управлять доступом к нему.
Полезные плагины для работы с REST API и кастомизацией
Для упрощения работы с REST API можно использовать следующие плагины:
- ACF to REST API — добавляет поля Advanced Custom Fields в REST API без дополнительного кода;
- WP REST Filter — расширяет возможности фильтрации запросов;
- WPGraphQL — альтернативный API с использованием GraphQL для более гибких запросов;
- Clearfy Pro — оптимизация и безопасность REST API;
- WP REST Cache — кэширование ответов для повышения производительности.
Выбирайте плагины исходя из задач вашего проекта и не забывайте тестировать их совместимость.
Подведение итогов: что мы изучили
В этой статье мы подробно рассмотрели, как создать удалённый вывод постов WordPress через REST API. Вы узнали, как:
- Добавлять пользовательские поля в стандартный ответ API;
- Реализовывать фильтрацию постов по метаданным;
- Создавать собственные эндпоинты с кастомной логикой;
- Обеспечивать безопасность и оптимизировать запросы;
- Использовать плагины для расширения функционала REST API.
Используйте полученные знания для разработки интеграций, мобильных приложений и нестандартных решений на базе WordPress.