Интеграция внешних API с WordPress — частая задача при разработке сайтов, которые требуют обмена данными с внешними сервисами. Чтобы сделать такую интеграцию удобной, важно не просто писать код вызова API, но и создать для него удобную настройку в админке WordPress. В этой статье подробно разберём, как создать в админке WordPress собственную страницу настроек для внешнего API с сохранением ключа, URL и других параметров. А также рассмотрим, как использовать эти настройки для реальных запросов к API.
Почему важно создавать отдельную страницу настроек для API
Часто при интеграции с внешними сервисами нужно хранить ключи доступа, URL, параметры и другие данные. Если эти параметры хардкодить в коде, то при смене ключа или адреса API придётся менять код и обновлять сайт. Это неудобно и небезопасно.
Создание отдельной страницы настроек в админке позволяет:
- Удобно и быстро менять параметры API без правки кода.
- Сохранять данные в базе WordPress, используя стандарты настроек.
- Делать настройки доступными только администраторам.
- Использовать WordPress API для валидации и безопасности.
Дальше разберём, как это сделать на практике.
Создание страницы настроек для внешнего API в WordPress
Регистрация страницы настроек в меню админки
Для начала добавим в меню админки свою страницу настроек. Для этого используем хук admin_menu и функцию add_options_page.
function wpexamples_add_api_settings_page() {
add_options_page(
'Настройки внешнего API',
'Внешний API',
'manage_options',
'wpexamples-api-settings',
'wpexamples_render_api_settings_page'
);
}
add_action('admin_menu', 'wpexamples_add_api_settings_page');
Здесь мы создаём пункт меню «Внешний API» в разделе «Настройки».
Рендеринг страницы с формой настройки
Следующий шаг — вывести форму с полями для ключа API, URL и другими параметрами. Используем стандартный API настроек WordPress.
function wpexamples_render_api_settings_page() {
if (!current_user_can('manage_options')) {
return;
}
?>
<div class="wrap">
<h1>Настройки внешнего API</h1>
<form action="options.php" method="post">
<?php
settings_fields('wpexamples_api_options_group');
do_settings_sections('wpexamples-api-settings');
submit_button();
?>
</form>
</div>
<?php
}
Функции settings_fields и do_settings_sections работают с группой настроек и секциями, которые мы зарегистрируем далее.
Регистрация настроек и полей
Для хранения настроек используем функцию register_setting. Для добавления полей — add_settings_section и add_settings_field.
function wpexamples_register_api_settings() {
register_setting('wpexamples_api_options_group', 'wpexamples_api_options', 'wpexamples_sanitize_api_options');
add_settings_section(
'wpexamples_api_main_section',
'Основные параметры API',
'wpexamples_api_section_callback',
'wpexamples-api-settings'
);
add_settings_field(
'api_url',
'URL API',
'wpexamples_api_url_render',
'wpexamples-api-settings',
'wpexamples_api_main_section'
);
add_settings_field(
'api_key',
'Ключ API',
'wpexamples_api_key_render',
'wpexamples-api-settings',
'wpexamples_api_main_section'
);
}
add_action('admin_init', 'wpexamples_register_api_settings');
Вывод полей ввода
Теперь реализуем функции, которые выведут поля ввода для URL и ключа.
function wpexamples_api_url_render() {
$options = get_option('wpexamples_api_options');
?>
<input type="url" name="wpexamples_api_options[api_url]" value="<?php echo esc_attr($options['api_url'] ?? ''); ?>" size="50">
<?php
}
function wpexamples_api_key_render() {
$options = get_option('wpexamples_api_options');
?>
<input type="text" name="wpexamples_api_options[api_key]" value="<?php echo esc_attr($options['api_key'] ?? ''); ?>" size="50">
<?php
}
Валидация и очистка данных
Перед сохранением важно проверить и очистить введённые данные для безопасности.
function wpexamples_sanitize_api_options($input) {
$new_input = [];
if (isset($input['api_url'])) {
$new_input['api_url'] = esc_url_raw($input['api_url']);
}
if (isset($input['api_key'])) {
$new_input['api_key'] = sanitize_text_field($input['api_key']);
}
return $new_input;
}
Описание секции настроек
Функция для вывода описания секции.
function wpexamples_api_section_callback() {
echo '<p>Введите параметры для подключения к внешнему API.</p>';
}
Пример использования сохранённых настроек для вызова API
Теперь, когда настройки есть, можно использовать их в коде для вызова API. Например, сделаем функцию, которая делает GET-запрос.
function wpexamples_call_external_api($endpoint) {
$options = get_option('wpexamples_api_options');
if (empty($options['api_url']) || empty($options['api_key'])) {
return new WP_Error('api_settings_missing', 'Настройки API не заданы');
}
$url = trailingslashit($options['api_url']) . ltrim($endpoint, '/');
$response = wp_remote_get($url, [
'headers' => [
'Authorization' => 'Bearer ' . $options['api_key'],
'Accept' => 'application/json',
],
'timeout' => 15,
]);
if (is_wp_error($response)) {
return $response;
}
$code = wp_remote_retrieve_response_code($response);
$body = wp_remote_retrieve_body($response);
if ($code !== 200) {
return new WP_Error('api_error', 'Ошибка API: код ' . $code, ['body' => $body]);
}
$data = json_decode($body, true);
if (json_last_error() !== JSON_ERROR_NONE) {
return new WP_Error('json_error', 'Ошибка разбора JSON');
}
return $data;
}
Эту функцию можно использовать в шаблонах или других частях сайта, чтобы получить данные с внешнего сервиса.
Рекомендации по безопасности и удобству
При работе с ключами API важно соблюдать несколько правил:
- Храните ключи только в настройках, не в открытых файлах.
- Доступ к настройкам должен быть только у администратора.
- Используйте HTTPS для вызовов API.
- Добавьте проверки ошибок и логирование, чтобы отлавливать проблемы с интеграцией.
Также рекомендуем использовать плагины для оптимизации и безопасности, например, Clearfy Pro для очистки и защиты сайта.
Подытожим
Создание собственной страницы настроек для внешнего API в WordPress значительно упрощает поддержку и развитие интеграций. Это позволяет быстро менять параметры без вмешательства в код, повышает безопасность и удобство работы с сайтом. В статье мы показали полный пример создания такой страницы с регистрацией настроек, выводом формы, валидацией и примером использования.