При разработке плагинов для WordPress часто возникает задача сохранить пользовательские настройки, чтобы они были доступны в административной панели и сохранялись в базе данных. В этой статье подробно разберём, как создать удобный и безопасный интерфейс настроек плагина с сохранением данных в базе.
Почему важно хранить настройки в базе данных WordPress
Хранение настроек плагина в базе данных WordPress — это стандартный и надёжный способ обеспечить постоянство параметров между сессиями и доступность для администратора сайта. WordPress предоставляет удобные функции для сохранения и получения опций, такие как get_option и update_option. Использование этих функций гарантирует совместимость с другими плагинами и темами, а также с системой резервного копирования.
Кроме того, правильная организация настроек облегчает поддержку и развитие плагина, а также позволяет быстро изменять параметры без прямого вмешательства в код.
Создание страницы настроек в администрационной панели
Для начала добавим новую страницу настроек в меню WordPress. Это делается с помощью функции add_options_page или add_menu_page. В примере ниже создадим страницу с названием "WPDO Настройки" в разделе "Настройки" WordPress.
function wpdo_add_settings_page() {
add_options_page(
'Настройки WPDO', // Заголовок страницы
'WPDO Настройки', // Название меню
'manage_options', // Права доступа
'wpdo-settings', // Слаг страницы
'wpdo_render_settings_page' // Функция вывода
);
}
add_action('admin_menu', 'wpdo_add_settings_page');Функция wpdo_render_settings_page будет отвечать за вывод HTML формы настроек.
Вывод формы с сохранением данных
Для удобства и безопасности используем API WordPress для настроек — register_setting, add_settings_section и add_settings_field. Это обеспечит автоматическую валидацию и защиту от CSRF.
function wpdo_register_settings() {
register_setting('wpdo_options_group', 'wpdo_options', 'wpdo_sanitize_options');
add_settings_section(
'wpdo_main_section',
'Основные настройки',
'wpdo_main_section_cb',
'wpdo-settings'
);
add_settings_field(
'wpdo_text_option',
'Текстовая опция',
'wpdo_text_option_cb',
'wpdo-settings',
'wpdo_main_section'
);
}
add_action('admin_init', 'wpdo_register_settings');
function wpdo_main_section_cb() {
echo '<p>Настройте параметры плагина WPDO ниже.</p>';
}
function wpdo_text_option_cb() {
$options = get_option('wpdo_options');
$value = isset($options['text_option']) ? esc_attr($options['text_option']) : '';
echo '<input type="text" name="wpdo_options[text_option]" value="' . $value . '" />';
}
function wpdo_sanitize_options($input) {
$output = array();
if (isset($input['text_option'])) {
$output['text_option'] = sanitize_text_field($input['text_option']);
}
return $output;
}Теперь функция wpdo_render_settings_page выводит форму, которая отправляет данные на обработку WordPress:
function wpdo_render_settings_page() {
?>
<div class="wrap">
<h1>Настройки WPDO</h1>
<form method="post" action="options.php">
<?php
settings_fields('wpdo_options_group');
do_settings_sections('wpdo-settings');
submit_button();
?>
</form>
</div>
<?php
}Добавление дополнительных типов полей для расширения настроек
Для более сложных настроек часто нужны разные типы полей: чекбоксы, выпадающие списки, текстовые области и цветовые селекторы.
Например, добавим чекбокс для включения функции:
function wpdo_checkbox_option_cb() {
$options = get_option('wpdo_options');
$checked = isset($options['checkbox_option']) && $options['checkbox_option'] ? 'checked' : '';
echo '<input type="checkbox" name="wpdo_options[checkbox_option]" ' . $checked . ' value="1" /> Включить функцию';
}
add_settings_field(
'wpdo_checkbox_option',
'Включить функцию',
'wpdo_checkbox_option_cb',
'wpdo-settings',
'wpdo_main_section'
);
function wpdo_sanitize_options($input) {
$output = array();
if (isset($input['text_option'])) {
$output['text_option'] = sanitize_text_field($input['text_option']);
}
$output['checkbox_option'] = !empty($input['checkbox_option']) ? 1 : 0;
return $output;
}Таким образом, можно расширять интерфейс настроек без потери удобства и безопасности.
Как использовать сохранённые настройки в коде плагина
После того, как настройки сохранены в базе, чтобы использовать их в логике плагина, просто вызовите get_option и получите нужные параметры.
$wpdo_options = get_option('wpdo_options');
if (!empty($wpdo_options['checkbox_option'])) {
// Логика при включённой функции
}
$text_value = isset($wpdo_options['text_option']) ? $wpdo_options['text_option'] : '';
// Используем $text_value где нужно
Важно всегда проверять наличие настроек и использовать функции очистки данных перед выводом.
Пример использования плагина Clearfy Pro для расширенного управления настройками
Если вы хотите облегчить работу с настройками и оптимизацией сайта, рекомендую обратить внимание на плагин Clearfy Pro. Он предоставляет множество готовых опций для оптимизации и безопасности, а также удобный интерфейс.
В сочетании с собственными настройками, реализованными по описанному выше принципу, можно построить мощный и удобный плагин с гибкой конфигурацией.
Резюме
Создание пользовательской страницы настроек с сохранением в базе данных — это базовый, но очень важный навык для разработчика плагинов WordPress. Используя встроенные функции API настроек, вы добьётесь удобства, безопасности и совместимости. Расширяйте интерфейс по мере необходимости, добавляя различные типы полей и валидируя данные. Пример, приведённый в статье, можно легко адаптировать под свои задачи и расширять.