Создание страницы настроек — один из важнейших этапов разработки собственного WordPress-плагина. Именно здесь администратор может управлять параметрами работы вашего решения, изменять значения, включать и отключать функции. WordPress предоставляет встроенные API-функции для организации этих настроек: register_setting(), add_settings_section() и add_settings_field(). В этой статье рассмотрим, как связать их между собой и правильно сохранять данные в базе через таблицу wp_options.
- Как работает система настроек WordPress
- Регистрация настройки с register_setting()
- Создание секции настроек: add_settings_section()
- Добавление поля: add_settings_field()
- Отображение формы на странице настроек
- Получение значения на фронтенде
- Добавление нескольких полей
- Полезные советы
- Заключение
Как работает система настроек WordPress
WordPress хранит все настройки (опции) в таблице wp_options, где каждая запись имеет уникальное имя (option_name) и значение (option_value). Разработчик может зарегистрировать свои собственные настройки, чтобы WordPress корректно сохранял и загружал их при работе плагина.
Для этого нужно:
- Зарегистрировать опцию через
register_setting(). - Создать секцию для настроек с
add_settings_section(). - Добавить конкретные поля с помощью
add_settings_field(). - Вывести форму в админке, используя
settings_fields()иdo_settings_sections().
Регистрация настройки с register_setting()
register_setting(
'ali_property_settings', // Группа настроек (settings group)
'ali_property_option' // Имя опции, хранящейся в базе данных
);
Эта функция сообщает WordPress, что мы хотим зарегистрировать новую настройку.
Первый параметр — идентификатор группы (его потом будем использовать в форме),
второй — имя опции, под которым данные будут сохранены в базе.
После регистрации данные можно будет получать и обновлять с помощью:
get_option('ali_property_option');
update_option('ali_property_option', $new_data);
Создание секции настроек: add_settings_section()
После регистрации опции создаём секцию, где будут располагаться поля:
add_settings_section(
'ali_property_section', // ID секции
__('Настройки свойств', 'textdomain'), // Заголовок секции
[$this, 'section_description'], // Callback для описания секции
'ali_property_page' // Страница, где выводится секция
);
Метод section_description() можно использовать, чтобы вывести пояснение над блоком:
public function section_description() {
echo '<p>Задайте параметры отображения фильтра для страницы свойств.</p>';
}
Добавление поля: add_settings_field()
Теперь добавим конкретное поле для ввода данных:
add_settings_field(
'filter_title', // ID поля
__('Заголовок фильтра', 'textdomain'), // Метка для поля
[$this, 'filter_title_html'], // Callback для вывода HTML
'ali_property_page', // Страница
'ali_property_section' // Секция
);
А сам HTML поля будет выглядеть так:
public function filter_title_html() {
$options = get_option('ali_property_option');
?>
<input
type="text"
name="ali_property_option[filter_title]"
value="<?php echo esc_attr($options['filter_title'] ?? ''); ?>"
placeholder="Введите заголовок фильтра"
/>
<?php
}
Функция get_option() возвращает массив всех сохранённых значений по ключу ali_property_option.
Используем оператор ?? для безопасного вывода, если значение ещё не задано.
Отображение формы на странице настроек
Чтобы настройки появились в админке, создаём страницу и подключаем форму:
<form method="post" action="options.php">
<?php
settings_errors();
settings_fields('ali_property_settings');
do_settings_sections('ali_property_page');
submit_button();
?>
</form>
settings_fields()добавляет скрытые поля для защиты и связи с группой настроек.do_settings_sections()выводит все секции и поля, зарегистрированные для страницы.submit_button()— стандартная кнопка сохранения.
Получение значения на фронтенде
После сохранения данных в админке можно легко использовать их в шаблонах или функциях темы:
$options = get_option('ali_property_option');
if (!empty($options['filter_title'])) {
echo '<h2>' . esc_html($options['filter_title']) . '</h2>';
}
Таким образом, администратор может изменить заголовок фильтра в панели, и он сразу отобразится на сайте.
Добавление нескольких полей
Если нужно добавить больше настроек, просто повторяем вызов add_settings_field() с другими ID и callback-функциями. Все значения можно хранить в одной опции как массив:
add_settings_field(
'archive_title',
__('Заголовок архивной страницы', 'textdomain'),
[$this, 'archive_title_html'],
'ali_property_page',
'ali_property_section'
);
А вывод значения в методе:
public function archive_title_html() {
$options = get_option('ali_property_option');
?>
<input
type="text"
name="ali_property_option[archive_title]"
value="<?php echo esc_attr($options['archive_title'] ?? ''); ?>"
placeholder="Введите заголовок архива"
/>
<?php
}
Полезные советы
- Не используйте одинаковые ID для страницы, секции и группы — это частая ошибка.
- Экранируйте вывод с помощью
esc_attr()иesc_html()для защиты от XSS. - Проверяйте существование значения через
isset()или оператор??, чтобы избежать предупреждений. - Все настройки автоматически сохраняются в таблицу
wp_optionsпосле отправки формы.
Заключение
Используя register_setting, add_settings_section и add_settings_field, вы можете создать полноценную страницу настроек для любого WordPress-плагина. Эти функции обеспечивают корректное хранение данных, безопасность и совместимость с административным интерфейсом WordPress.
Благодаря этому подходу ваш плагин будет соответствовать стандартам ядра и легко расширяться в будущем.