WordPress REST API значительно расширяет возможности взаимодействия с сайтом, позволяя создавать мощные и гибкие плагины, которые могут работать с данными сайта через HTTP-запросы. В этой статье мы подробно разберем, как создать простой плагин для WordPress, который использует REST API для получения и добавления пользовательских данных. Это будет полезно для разработчиков, которые хотят понять, как правильно регистрировать маршруты, обрабатывать запросы и интегрировать API в свои проекты.
Что такое REST API в WordPress и зачем он нужен
REST API — это интерфейс программирования приложений, который позволяет взаимодействовать с сайтом WordPress через HTTP-запросы. Он предоставляет стандартизированные маршруты для работы с постами, пользователями, метаданными и другими сущностями. Но самое главное — вы можете создавать свои собственные маршруты и эндпоинты, чтобы расширять функционал.
Использование REST API позволяет:
- Создавать динамичные интерфейсы на React, Vue и других фреймворках.
- Писать мобильные приложения, которые общаются с вашим сайтом.
- Расширять возможности админки или фронтенда кастомным функционалом.
В нашем примере мы создадим плагин, который позволит создавать и получать записи из кастомной таблицы через REST API.
Создаем структуру плагина и регистрируем маршруты REST API
Начнем с создания базового файла плагина wpid-rest-api-example.php в папке wp-content/plugins/wpid-rest-api-example/. В нем регистрируем кастомный маршрут и обработчики.
<?php
/**
* Plugin Name: WPID REST API Example
* Description: Пример плагина с использованием REST API в WordPress
* Version: 1.0
* Author: WPID
*/
// Регистрация маршрутов при инициализации REST API
add_action('rest_api_init', 'wpid_register_rest_routes');
function wpid_register_rest_routes() {
register_rest_route('wpid/v1', '/items', array(
'methods' => 'GET',
'callback' => 'wpid_get_items',
'permission_callback' => '__return_true',
));
register_rest_route('wpid/v1', '/items', array(
'methods' => 'POST',
'callback' => 'wpid_create_item',
'permission_callback' => function() {
return current_user_can('edit_posts');
},
));
}
Здесь мы создаем два маршрута: один для получения списка элементов методом GET, другой — для создания нового элемента методом POST. Обратите внимание на permission_callback: для GET-запроса разрешаем всем, для POST — только авторизованным пользователям с правами редактирования.
Обработка GET-запроса: получение данных
Для демонстрации создадим простую функцию, которая возвращает массив тестовых данных. В реальном плагине здесь будет запрос к базе данных или использование WP_Query.
function wpid_get_items() {
$items = array(
array('id' => 1, 'name' => 'Первый элемент'),
array('id' => 2, 'name' => 'Второй элемент'),
);
return rest_ensure_response($items);
}
Функция возвращает ответ в формате JSON, который автоматически сгенерирует WordPress.
Обработка POST-запроса: создание нового элемента
Теперь напишем обработчик, который принимает JSON с данными, валидирует их и возвращает результат. В реальном сценарии здесь вы бы сохраняли данные в базе.
function wpid_create_item(WP_REST_Request $request) {
$params = $request->get_json_params();
if (empty($params['name'])) {
return new WP_Error('missing_name', 'Поле name обязательно', array('status' => 400));
}
// Здесь можно добавить сохранение в базу данных
$new_item = array(
'id' => rand(100, 999), // Имитация ID
'name' => sanitize_text_field($params['name']),
);
return rest_ensure_response($new_item);
}
Обратите внимание на проверку обязательного поля и очистку входных данных. Это важный момент безопасности.
Пример вызова REST API с фронтенда через JavaScript
Чтобы продемонстрировать, как использовать созданное API, добавим пример запроса из браузера с помощью Fetch API.
fetch('/wp-json/wpid/v1/items')
.then(response => response.json())
.then(data => console.log('Полученные элементы:', data));
// Для отправки POST-запроса с авторизацией
fetch('/wp-json/wpid/v1/items', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-WP-Nonce': wpApiSettings.nonce // nonce нужно передать из WordPress
},
body: JSON.stringify({ name: 'Новый элемент' })
})
.then(response => response.json())
.then(data => console.log('Созданный элемент:', data));
Для корректной работы POST-запроса с авторизацией необходимо передать nonce — защитный токен WordPress. Его можно внедрить через wp_localize_script или аналогичные методы.
Заключение: расширение и применение REST API в плагинах
Этот простой пример показывает основные шаги — регистрацию маршрутов, обработку запросов и отправку ответов. На практике вы будете работать с базой данных, создавать сложные модели данных и защищать API. REST API в WordPress — мощный инструмент, который открывает широкие возможности для кастомизации и интеграции.
Рекомендуется изучить официальную документацию WordPress REST API и использовать стандартные функции для работы с данными, чтобы обеспечить безопасность и совместимость.