Как использовать REST API в WordPress для создания панели настроек

Современные методы разработки для WordPress предполагают использование REST API для взаимодействия с сервером без перезагрузки страницы. Особенно это актуально при создании пользовательских панелей настроек, где удобство работы администратора напрямую зависит от скорости и интерактивности интерфейса. В этой статье мы подробно рассмотрим, как с помощью REST API создать собственную страницу настроек в админке WordPress, используя AJAX-запросы и современные подходы к безопасности.

Что такое REST API в WordPress и почему его стоит использовать

REST API — это интерфейс программирования приложений, который позволяет взаимодействовать с WordPress через HTTP-запросы. Он дает возможность обращаться к данным сайта, создавать, изменять и удалять записи, настраивать параметры и многое другое, используя стандартные методы: GET, POST, PUT, DELETE.

До появления REST API разработчики часто использовали admin-ajax.php для AJAX-запросов, что замедляло работу и усложняло код. REST API же предоставляет более гибкую и масштабируемую архитектуру, с четкой структурой URL и поддержкой форматов JSON.

Применительно к панели настроек, REST API позволяет создавать динамичные интерфейсы, где изменения параметров сохраняются без перезагрузки страницы, что улучшает UX и упрощает разработку.

Создание кастомного REST API эндпоинта для настроек

Для начала создадим свой REST API маршрут, который будет обрабатывать запросы сохранения и получения настроек. В WordPress это делается с помощью функции register_rest_route. Пример регистрации маршрута:

add_action('rest_api_init', function () {
    register_rest_route('wpsolution/v1', '/settings', array(
        'methods' => 'GET',
        'callback' => 'wpsolution_get_settings',
        'permission_callback' => 'wpsolution_permissions_check',
    ));
    register_rest_route('wpsolution/v1', '/settings', array(
        'methods' => 'POST',
        'callback' => 'wpsolution_update_settings',
        'permission_callback' => 'wpsolution_permissions_check',
    ));
});

Здесь мы создаем два маршрута под namespace wpsolution/v1 — один для получения настроек (GET), другой для их обновления (POST). Очень важно обеспечить проверку прав доступа через permission_callback, чтобы только авторизованные администраторы могли менять параметры.

Реализация функций обработки запросов:

function wpsolution_permissions_check() {
    return current_user_can('manage_options');
}

function wpsolution_get_settings() {
    $option = get_option('wpsolution_custom_settings', []);
    return rest_ensure_response($option);
}

function wpsolution_update_settings(WP_REST_Request $request) {
    $params = $request->get_json_params();
    // Валидация и фильтрация данных
    $sanitized = array_map('sanitize_text_field', $params);
    update_option('wpsolution_custom_settings', $sanitized);
    return rest_ensure_response(['success' => true]);
}

В этих функциях мы получаем и сохраняем опции в базе WordPress через стандартные API — get_option и update_option. При сохранении важно фильтровать данные для безопасности.

Создание интерфейса панели настроек с использованием JavaScript и REST API

Теперь создадим страницу в админке WordPress, которая будет обращаться к нашим REST API методам. Для этого добавим пункт меню и подключим скрипт с React, Vue.js или просто с jQuery.

Пример добавления страницы:

add_action('admin_menu', function () {
    add_menu_page(
        'Настройки WPSolution',
        'WPSolution',
        'manage_options',
        'wpsolution-settings',
        'wpsolution_render_settings_page'
    );
});

function wpsolution_render_settings_page() {
    echo '<div id="wpsolution-settings-app"></div>';
}

Далее подключим скрипт и передадим в него nonce для безопасности запросов:

add_action('admin_enqueue_scripts', function ($hook) {
    if ($hook !== 'toplevel_page_wpsolution-settings') {
        return;
    }
    wp_enqueue_script('wpsolution-settings-js', plugin_dir_url(__FILE__) . 'settings.js', ['jquery'], '1.0', true);
    wp_localize_script('wpsolution-settings-js', 'wpsolutionSettings', [
        'nonce' => wp_create_nonce('wp_rest'),
        'restUrl' => esc_url_raw(rest_url('wpsolution/v1/settings')),
    ]);
});

Пример JavaScript-кода с jQuery для загрузки и сохранения настроек

(function ($) {
    $(document).ready(function () {
        function loadSettings() {
            $.ajax({
                url: wpsolutionSettings.restUrl,
                method: 'GET',
                beforeSend: function (xhr) {
                    xhr.setRequestHeader('X-WP-Nonce', wpsolutionSettings.nonce);
                },
                success: function (data) {
                    $('#setting1').val(data.setting1 || '');
                    $('#setting2').val(data.setting2 || '');
                },
                error: function () {
                    alert('Ошибка загрузки настроек');
                }
            });
        }

        function saveSettings() {
            var settings = {
                setting1: $('#setting1').val(),
                setting2: $('#setting2').val()
            };
            $.ajax({
                url: wpsolutionSettings.restUrl,
                method: 'POST',
                contentType: 'application/json',
                data: JSON.stringify(settings),
                beforeSend: function (xhr) {
                    xhr.setRequestHeader('X-WP-Nonce', wpsolutionSettings.nonce);
                },
                success: function () {
                    alert('Настройки сохранены');
                },
                error: function () {
                    alert('Ошибка при сохранении');
                }
            });
        }

        loadSettings();

        $('#save-settings').on('click', function () {
            saveSettings();
        });
    });
})(jQuery);

HTML-код для формы на странице настроек:

<form id="wpsolution-settings-form">
    <label for="setting1">Настройка 1:</label>
    <input type="text" id="setting1" name="setting1" /><br><br>

    <label for="setting2">Настройка 2:</label>
    <input type="text" id="setting2" name="setting2" /><br><br>

    <button type="button" id="save-settings">Сохранить</button>
</form>

Полезные плагины для работы с REST API в WordPress

Если не хочется писать всё с нуля, можно использовать готовые решения, облегчающие работу с REST API:

  • WP REST API Controller — позволяет управлять доступом к эндпоинтам, создавать собственные поля и контролировать поведение API без программирования.
  • Advanced Custom Fields (ACF) to REST API — расширяет стандартный REST API, добавляя поля ACF в ответ, что удобно для созданий кастомных настроек и интерфейсов.
  • REST API Toolbox — гибкий менеджер маршрутов и разрешений, помогает быстро настроить REST API под задачи сайта.

Безопасность и оптимизация REST API запросов

При работе с REST API крайне важно обеспечить безопасность. Использование permission_callback и nonce — обязательные меры. Не стоит передавать и принимать через API чувствительные данные без шифрования.

Также рекомендуем ограничить частоту запросов, чтобы избежать перегрузки сервера. Для этого можно использовать стандартные WP хуки или сторонние решения по rate limiting.

Не забывайте валидировать и санитизировать все входящие данные, чтобы избежать XSS и SQL-инъекций.

Итог

Использование REST API для создания панели настроек — современный и удобный способ улучшить пользовательский опыт в админке WordPress. Такой подход делает интерфейс отзывчивым, безопасным и легко расширяемым. В статье приведены базовые примеры, которые вы можете доработать под свои задачи, подключить фреймворки JS или интегрировать с другими плагинами.

Как создать автоматический резервный бэкап WordPress с помощью плагинов и кода
03.01.2026
Как удалить метаданные заказа WooCommerce из базы после его закрытия
24.04.2026
Как создать свой плагин в WordPress с примером кода
05.11.2025
Как удалить порты в WordPress для блокировки внешних запросов
30.03.2026
Как использовать WP-Cron для автоматизации задач в WordPress
07.12.2025