Что такое REST API в WordPress и зачем он нужен
REST API — это современный способ взаимодействия с сайтом WordPress через HTTP-запросы. Он позволяет получать, создавать, обновлять и удалять данные сайта в формате JSON. Это открывает широкие возможности для разработки кастомных приложений, мобильных клиентов и интеграций с внешними сервисами.
Начиная с версии 4.7, WordPress поставляется с встроенным REST API, который покрывает основные типы данных: посты, страницы, таксономии, пользователи и т.д. Но стандартный функционал можно расширять, добавляя собственные REST маршруты и контроллеры — это особенно полезно, если нужно реализовать уникальную бизнес-логику или работать с кастомными типами записей.
В этой статье мы подробно разберём, как использовать REST API в WordPress для создания кастомных решений, с примерами регистрации собственных эндпоинтов и обработки запросов.
Регистрация кастомного REST API эндпоинта в WordPress
Чтобы добавить новый маршрут в REST API, нужно воспользоваться хуком rest_api_init и функцией register_rest_route. Рассмотрим пример регистрации простого эндпоинта, который возвращает список последних кастомных записей.
add_action('rest_api_init', function () {
register_rest_route('wplike/v1', '/custom-posts/', array(
'methods' => 'GET',
'callback' => 'wplike_get_custom_posts',
'permission_callback' => '__return_true',
));
});
function wplike_get_custom_posts() {
$args = array(
'post_type' => 'custom_post', // замените на ваш тип записи
'posts_per_page' => 5,
'post_status' => 'publish'
);
$query = new WP_Query($args);
$posts = array();
if ($query->have_posts()) {
while ($query->have_posts()) {
$query->the_post();
$posts[] = array(
'id' => get_the_ID(),
'title' => get_the_title(),
'excerpt' => get_the_excerpt(),
'link' => get_permalink(),
);
}
wp_reset_postdata();
}
return $posts;
}В этом коде мы создаём маршрут /wp-json/wplike/v1/custom-posts/, который при GET-запросе отдаёт список из 5 последних записей типа custom_post. Параметр permission_callback установлен в __return_true для открытого доступа, но в боевых условиях лучше реализовать проверку прав.
Такой подход позволяет легко создавать свои API для мобильных приложений, фронтенд на React или Vue или интеграции с внешними системами.
Обработка POST-запросов и создание записи через REST API
REST API WordPress поддерживает все основные методы HTTP, включая POST для создания новых записей. Рассмотрим, как сделать эндпоинт для добавления новой записи кастомного типа через API.
add_action('rest_api_init', function () {
register_rest_route('wplike/v1', '/custom-posts/', array(
'methods' => 'POST',
'callback' => 'wplike_create_custom_post',
'permission_callback' => 'wplike_check_permissions',
'args' => array(
'title' => array(
'required' => true,
'type' => 'string',
),
'content' => array(
'required' => true,
'type' => 'string',
),
),
));
});
function wplike_check_permissions() {
return current_user_can('edit_posts');
}
function wplike_create_custom_post(WP_REST_Request $request) {
$title = sanitize_text_field($request->get_param('title'));
$content = sanitize_textarea_field($request->get_param('content'));
$post_id = wp_insert_post(array(
'post_title' => $title,
'post_content' => $content,
'post_status' => 'publish',
'post_type' => 'custom_post',
));
if (is_wp_error($post_id)) {
return new WP_Error('post_creation_failed', 'Не удалось создать запись', array('status' => 500));
}
return array('post_id' => $post_id, 'message' => 'Запись успешно создана');
}Здесь мы добавили POST-эндпоинт с обязательными параметрами title и content. Функция wplike_check_permissions проверяет, что пользователь авторизован и имеет право создавать записи. Если проверка не пройдена, API вернёт ошибку 403.
Такой подход позволяет безопасно расширять функционал сайта и создавать полноценные API для управления контентом.
Использование популярных плагинов для работы с REST API
Кроме собственного кода, есть плагины, которые значительно упрощают работу с REST API и расширяют его возможности:
- WP REST API Controller — позволяет управлять, какие поля и типы записей доступны в API, без программирования.
- Advanced Custom Fields (ACF) — вместе с дополнением
ACF to REST APIпозволяет выводить кастомные поля в ответах API. - JWT Authentication for WP REST API — добавляет поддержку авторизации через JSON Web Token, что удобно для мобильных приложений.
Использование этих плагинов ускоряет разработку и повышает безопасность.
Примеры интеграции REST API WordPress с внешними сервисами
REST API WordPress отлично подходит для интеграции с любыми внешними сервисами. Например, можно реализовать автоматическую публикацию новых постов из CRM или получение данных для мобильного приложения.
Рассмотрим простой пример отправки GET-запроса к вашему кастомному эндпоинту с помощью PHP и функции wp_remote_get:
$response = wp_remote_get('https://wplike.ru/wp-json/wplike/v1/custom-posts/');
if (is_wp_error($response)) {
echo 'Ошибка запроса';
} else {
$body = wp_remote_retrieve_body($response);
$data = json_decode($body, true);
foreach ($data as $post) {
echo 'Название: ' . esc_html($post['title']) . '<br>';
echo 'Ссылка: <a href="' . esc_url($post['link']) . '">' . esc_url($post['link']) . '</a><br><br>';
}
}Такой код можно использовать в другом плагине или внешнем скрипте для получения данных с сайта WordPress.
Советы по безопасности при работе с REST API
При создании кастомных эндпоинтов важно не забывать о безопасности. Некоторые рекомендации:
- Используйте
permission_callbackдля проверки прав доступа. - Санитизируйте и валидируйте все входящие данные.
- Не давайте публичный доступ к чувствительной информации.
- При необходимости используйте аутентификацию через OAuth, JWT или cookie.
Без соблюдения этих правил можно легко получить уязвимости, через которые злоумышленники смогут нанести вред вашему сайту.