WordPress REST API — мощный инструмент, который позволяет взаимодействовать с сайтом через HTTP-запросы. Это открывает большие возможности для создания динамических интерфейсов, мобильных приложений и расширенных административных панелей. В этой статье мы подробно разберём, как использовать REST API для создания пользовательских настроек на вашем сайте WordPress, включая примеры кода и рекомендации по безопасности.
Что такое WordPress REST API и зачем он нужен для настроек
REST API — это интерфейс, который позволяет получать и изменять данные сайта через HTTP-запросы. В WordPress он используется для управления постами, пользователями, терминами и многим другим. Но что, если нам нужно дать пользователю возможность сохранять собственные настройки — например, для плагина или темы — через REST API?
Использование REST API для настроек позволяет:
- Создавать кастомные страницы настроек с динамическим интерфейсом на React или Vue;
- Организовывать взаимодействие с настройками из мобильных приложений;
- Обеспечивать асинхронное сохранение параметров без перезагрузки страницы.
Для этого достаточно зарегистрировать свои REST маршруты и обработчики, которые будут читать и записывать данные в базу WordPress.
Регистрация REST API маршрута для пользовательских настроек
Для начала создадим собственный REST API маршрут. Предположим, мы хотим сделать настройки для плагина под доменом wpturbo.ru и назовём функции с префиксом wpturbo_ для удобства.
Добавим следующий код в файл вашего плагина или в functions.php темы:
add_action('rest_api_init', 'wpturbo_register_settings_routes');
function wpturbo_register_settings_routes() {
register_rest_route('wpturbo/v1', '/settings', array(
'methods' => 'GET',
'callback' => 'wpturbo_get_settings',
'permission_callback' => function () {
return current_user_can('manage_options');
}
));
register_rest_route('wpturbo/v1', '/settings', array(
'methods' => 'POST',
'callback' => 'wpturbo_update_settings',
'permission_callback' => function () {
return current_user_can('manage_options');
}
));
}Здесь мы регистрируем два маршрута: GET для получения настроек и POST для их обновления. Обратите внимание на permission_callback — он ограничивает доступ только администраторам.
Функция для получения настроек
Реализуем функцию wpturbo_get_settings, которая вернёт текущие настройки из базы данных WordPress. Для хранения настроек удобно использовать функцию get_option.
function wpturbo_get_settings() {
$settings = get_option('wpturbo_custom_settings', array(
'color' => 'blue',
'show_banner' => true,
'items_per_page' => 10
));
return rest_ensure_response($settings);
}Если настроек ещё нет, возвращаем настройки по умолчанию.
Функция для обновления настроек
Для обновления настроек реализуем wpturbo_update_settings. Здесь нам нужно обработать POST-запрос, проверить данные и сохранить их в опции.
function wpturbo_update_settings(WP_REST_Request $request) {
$params = $request->get_json_params();
// Валидация данных
$color = isset($params['color']) ? sanitize_text_field($params['color']) : 'blue';
$show_banner = isset($params['show_banner']) ? filter_var($params['show_banner'], FILTER_VALIDATE_BOOLEAN) : true;
$items_per_page = isset($params['items_per_page']) ? intval($params['items_per_page']) : 10;
$new_settings = array(
'color' => $color,
'show_banner' => $show_banner,
'items_per_page' => $items_per_page
);
update_option('wpturbo_custom_settings', $new_settings);
return rest_ensure_response(array('success' => true, 'settings' => $new_settings));
}Обратите внимание на использование функций sanitize_text_field и filter_var для очистки входящих данных — это важно для безопасности.
Пример использования REST API для настроек на фронтенде
Теперь, когда API готов, можно создавать пользовательский интерфейс для управления настройками. Рассмотрим пример на JavaScript с использованием fetch.
Для начала получим текущие настройки:
fetch('/wp-json/wpturbo/v1/settings', {
method: 'GET',
credentials: 'same-origin'
})
.then(response => response.json())
.then(data => {
console.log('Текущие настройки:', data);
// Здесь можно заполнить форму значениями
});Для обновления настроек отправим POST-запрос:
fetch('/wp-json/wpturbo/v1/settings', {
method: 'POST',
credentials: 'same-origin',
headers: {
'Content-Type': 'application/json',
'X-WP-Nonce': wpturboSettings.nonce
},
body: JSON.stringify({
color: 'red',
show_banner: false,
items_per_page: 20
})
})
.then(response => response.json())
.then(data => {
if (data.success) {
alert('Настройки обновлены');
}
});Для передачи nonce (число для защиты от CSRF) нужно локализовать скрипт в WordPress и передать nonce через wp_localize_script или wp_enqueue_script.
Безопасность и лучшие практики при работе с REST API
Использование REST API требует особого внимания к безопасности:
- Всегда проверяйте права пользователя в
permission_callback. Лучше ограничивать доступ только администраторам или конкретным ролям. - Санитизируйте и валидируйте входящие данные, чтобы избежать внедрения вредоносного кода.
- Используйте nonce для защиты POST-запросов от CSRF-атак.
- Логируйте ошибки и необычные запросы, чтобы быстро реагировать на возможные атаки.
Кроме того, рекомендуется использовать HTTPS, чтобы защитить данные при передаче.
Популярные плагины для работы с REST API и настройками
Если не хочется писать всё с нуля, можно использовать готовые решения:
- WP REST API Controller — плагин для расширения и настройки REST API без кода.
- ACF to REST API — расширение для интеграции Advanced Custom Fields с REST API.
- WP API Console — позволяет тестировать запросы к REST API прямо из админки.
Но если нужны уникальные настройки и логика — лучше писать свой код, как показано выше.
Заключение
Использование REST API для управления пользовательскими настройками в WordPress — современный и гибкий подход, который позволяет создавать удобные и интерактивные интерфейсы. С помощью простых функций и правильной организации кода можно легко реализовать чтение и запись настроек, обеспечивая безопасность и удобство для пользователей и администраторов.