Что такое пользовательские настройки в WordPress и зачем они нужны
Пользовательские настройки позволяют разработчикам добавлять собственные параметры в админ-панель WordPress для управления функционалом темы или плагина. Это удобный способ предоставить пользователям гибкие возможности по настройке без необходимости редактировать код.
Например, вы можете добавить настройку цвета, текста кнопок, ссылок на соцсети или параметры подключения к внешним сервисам. Благодаря этому ваш плагин или тема станет более универсальными и удобными в использовании.
В этой статье мы подробно разберём, как создать пользовательскую настройку с помощью Settings API — официального и рекомендуемого способа работы с настройками в WordPress.
Основы работы с Settings API: регистрация настроек, секций и полей
Settings API состоит из нескольких ключевых функций, которые позволяют создавать страницы настроек с разделами и полями. Основные шаги:
- Создать страницу настроек или добавить раздел на существующую с помощью
add_options_pageилиadd_menu_page. - Зарегистрировать настройки с помощью
register_setting. - Добавить секции настроек через
add_settings_section. - Добавить поля с помощью
add_settings_field, определив функцию вывода поля.
Каждый параметр будет храниться в таблице wp_options как отдельная опция или как часть массива опций.
Пример регистрации страницы и настройки в плагине wpmake
add_action('admin_menu', 'wpmake_add_settings_page');
function wpmake_add_settings_page() {
add_options_page('Настройки WPMake', 'WPMake Settings', 'manage_options', 'wpmake-settings', 'wpmake_render_settings_page');
}
add_action('admin_init', 'wpmake_register_settings');
function wpmake_register_settings() {
register_setting('wpmake_options_group', 'wpmake_options', 'wpmake_options_validate');
add_settings_section('wpmake_main_section', 'Основные настройки', 'wpmake_section_text', 'wpmake-settings');
add_settings_field('wpmake_text_string', 'Текстовое поле', 'wpmake_setting_string', 'wpmake-settings', 'wpmake_main_section');
}
Этот код добавляет страницу в меню «Настройки» и регистрирует группу опций с одним текстовым полем.
Функции вывода секции и поля
function wpmake_section_text() {
echo '<p>Настройте параметры плагина WPMake ниже.</p>';
}
function wpmake_setting_string() {
$options = get_option('wpmake_options');
echo "<input id='wpmake_text_string' name='wpmake_options[text_string]' type='text' value='" . esc_attr($options['text_string'] ?? '') . "' />";
}
Валидация и сохранение пользовательских настроек
Очень важно валидировать и фильтровать данные, поступающие из формы настроек, чтобы избежать ошибок и угроз безопасности. В функции валидации можно обрезать лишние пробелы, исправлять формат, проверять типы данных и т.д.
В нашем примере функция wpmake_options_validate будет проверять, что текстовое поле — строка без опасных символов:
function wpmake_options_validate($input) {
$newinput = [];
if (isset($input['text_string'])) {
$newinput['text_string'] = sanitize_text_field($input['text_string']);
}
return $newinput;
}
WordPress автоматически сохранит результат этой функции в базу данных, если она вернула валидные данные.
Добавление разных типов полей: чекбоксы, селекты, текстовые области
Settings API позволяет создавать поля различных типов. Рассмотрим примеры наиболее популярных.
Чекбокс
function wpmake_setting_checkbox() {
$options = get_option('wpmake_options');
$checked = !empty($options['checkbox']) ? 'checked' : '';
echo "<input id='wpmake_checkbox' name='wpmake_options[checkbox]' type='checkbox' value='1' $checked />";
}
Выпадающий список (select)
function wpmake_setting_select() {
$options = get_option('wpmake_options');
$value = $options['select'] ?? '';
echo "<select id='wpmake_select' name='wpmake_options[select]'>
<option value='option1" . selected($value, 'option1', false) . "'>Опция 1</option>
<option value='option2" . selected($value, 'option2', false) . "'>Опция 2</option>
</select>";
}
Текстовая область
function wpmake_setting_textarea() {
$options = get_option('wpmake_options');
$text = $options['textarea'] ?? '';
echo "<textarea id='wpmake_textarea' name='wpmake_options[textarea]' rows='5' cols='50'>" . esc_textarea($text) . "</textarea>";
}
Для каждого поля нужно добавить соответствующую регистрацию через add_settings_field и обработку в функции валидации.
Пример полного плагина для пользовательских настроек WPMake
Ниже пример минимального плагина, который добавляет страницу настроек с несколькими типами полей:
<?php
/**
* Plugin Name: WPMake Custom Settings
* Description: Добавляет пользовательские настройки в админку WordPress.
* Version: 1.0
* Author: WPMake
*/
add_action('admin_menu', 'wpmake_add_settings_page');
function wpmake_add_settings_page() {
add_options_page('Настройки WPMake', 'WPMake Settings', 'manage_options', 'wpmake-settings', 'wpmake_render_settings_page');
}
add_action('admin_init', 'wpmake_register_settings');
function wpmake_register_settings() {
register_setting('wpmake_options_group', 'wpmake_options', 'wpmake_options_validate');
add_settings_section('wpmake_main_section', 'Основные настройки', 'wpmake_section_text', 'wpmake-settings');
add_settings_field('wpmake_text_string', 'Текстовое поле', 'wpmake_setting_string', 'wpmake-settings', 'wpmake_main_section');
add_settings_field('wpmake_checkbox', 'Чекбокс', 'wpmake_setting_checkbox', 'wpmake-settings', 'wpmake_main_section');
add_settings_field('wpmake_select', 'Выпадающий список', 'wpmake_setting_select', 'wpmake-settings', 'wpmake_main_section');
add_settings_field('wpmake_textarea', 'Текстовая область', 'wpmake_setting_textarea', 'wpmake-settings', 'wpmake_main_section');
}
function wpmake_section_text() {
echo '<p>Настройте параметры плагина WPMake ниже.</p>';
}
function wpmake_setting_string() {
$options = get_option('wpmake_options');
echo "<input id='wpmake_text_string' name='wpmake_options[text_string]' type='text' value='" . esc_attr($options['text_string'] ?? '') . "' />";
}
function wpmake_setting_checkbox() {
$options = get_option('wpmake_options');
$checked = !empty($options['checkbox']) ? 'checked' : '';
echo "<input id='wpmake_checkbox' name='wpmake_options[checkbox]' type='checkbox' value='1' $checked />";
}
function wpmake_setting_select() {
$options = get_option('wpmake_options');
$value = $options['select'] ?? '';
echo "<select id='wpmake_select' name='wpmake_options[select]'>
<option value='option1' " . selected($value, 'option1', false) . ">Опция 1</option>
<option value='option2' " . selected($value, 'option2', false) . ">Опция 2</option>
</select>";
}
function wpmake_setting_textarea() {
$options = get_option('wpmake_options');
$text = $options['textarea'] ?? '';
echo "<textarea id='wpmake_textarea' name='wpmake_options[textarea]' rows='5' cols='50'>" . esc_textarea($text) . "</textarea>";
}
function wpmake_options_validate($input) {
$newinput = [];
if (isset($input['text_string'])) {
$newinput['text_string'] = sanitize_text_field($input['text_string']);
}
$newinput['checkbox'] = !empty($input['checkbox']) ? 1 : 0;
if (isset($input['select']) && in_array($input['select'], ['option1', 'option2'])) {
$newinput['select'] = $input['select'];
}
if (isset($input['textarea'])) {
$newinput['textarea'] = sanitize_textarea_field($input['textarea']);
}
return $newinput;
}
function wpmake_render_settings_page() {
?>
<div class="wrap">
<h1>Настройки WPMake</h1>
<form method="post" action="options.php">
<?php
settings_fields('wpmake_options_group');
do_settings_sections('wpmake-settings');
submit_button();
?>
</form>
</div>
<?php
}
?>
Полезные плагины для расширения возможностей настроек
Если хочется не писать всё вручную, есть готовые плагины и библиотеки, которые значительно упрощают работу с настройками:
- Advanced Custom Fields (ACF) — мощный инструмент для создания пользовательских полей и настроек с удобным интерфейсом.
- Redux Framework — фреймворк для создания панелей настроек с множеством типов полей и интеграцией с темами.
- CMB2 — лёгкая библиотека для создания метабоксов и пользовательских настроек.
Однако для базовых и средних задач Settings API — самый надёжный и нативный способ, который не требует сторонних зависимостей.
Выводы и рекомендации
Создание пользовательских настроек через Settings API — это обязательный навык для разработчика WordPress, который позволяет сделать продукты более гибкими и удобными. Следуйте рекомендациям по безопасности, используйте валидацию и экранирование, и ваши настройки будут работать быстро и без сбоев.
Начинайте с простых текстовых полей и постепенно добавляйте более сложные элементы управления. Не забывайте про удобство пользователя — чёткие описания и логичная структура настроек повышают качество вашего плагина или темы.