Функция do_settings_sections()
является частью Settings API в WordPress и используется для вывода всех зарегистрированных секций и полей настроек для определенной страницы админ-панели. Она обычно вызывается в callback-функции, отвечающей за вывод страницы настроек, и автоматически отображает все секции, зарегистрированные для заданной страницы с помощью add_settings_section()
и add_settings_field()
.
Функция выводит заголовки секций в теге <h3>
, а сами поля — в виде таблиц, что обеспечивает стандартный вид интерфейса настроек в WordPress.
do_settings_sections( string $page );
Параметры
- $page (string) – Идентификатор (slug) страницы настроек, для которой нужно вывести секции и поля. Этот параметр должен совпадать с тем, который был использован при регистрации секций через
add_settings_section()
.
Как это работает
Функция do_settings_sections()
автоматически собирает и выводит все секции и поля, которые были зарегистрированы для указанной страницы с помощью функций add_settings_section()
и add_settings_field()
. Она не требует дополнительных параметров для указания конкретных полей, так как выводит все поля, связанные с каждой секцией.
Пример 1: Вывод секций на странице настроек плагина
Предположим, что у нас есть плагин, который добавляет свои настройки на страницу с идентификатором plugin_settings_page
. Мы зарегистрировали несколько секций и полей, а теперь хотим вывести их на этой странице.
<?php
add_action('admin_menu', 'custom_plugin_menu');
function custom_plugin_menu() {
add_options_page(
__('Настройки плагина', 'textdomain'),
__('Мой плагин', 'textdomain'),
'manage_options',
'plugin_settings_page',
'plugin_settings_page_callback'
);
}
function plugin_settings_page_callback() {
?>
<div class="wrap">
<h1><?php _e('Настройки плагина', 'textdomain'); ?></h1>
<form action="options.php" method="POST">
<?php
settings_fields('plugin_settings_group'); // Регистрация настроек
do_settings_sections('plugin_settings_page'); // Вывод всех секций
submit_button();
?>
</form>
</div>
<?php
}
add_action('admin_init', 'plugin_settings_init');
function plugin_settings_init() {
// Регистрация первой секции
add_settings_section(
'general_settings_section',
__('Общие настройки', 'textdomain'),
'general_section_callback',
'plugin_settings_page'
);
// Добавление поля в первую секцию
add_settings_field(
'general_option',
__('Опция 1', 'textdomain'),
'general_option_callback',
'plugin_settings_page',
'general_settings_section'
);
// Регистрация первой опции
register_setting('plugin_settings_group', 'general_option');
// Регистрация второй секции
add_settings_section(
'advanced_settings_section',
__('Продвинутые настройки', 'textdomain'),
'advanced_section_callback',
'plugin_settings_page'
);
// Добавление поля во вторую секцию
add_settings_field(
'advanced_option',
__('Опция 2', 'textdomain'),
'advanced_option_callback',
'plugin_settings_page',
'advanced_settings_section'
);
// Регистрация второй опции
register_setting('plugin_settings_group', 'advanced_option');
}
function general_section_callback() {
echo '<p>' . __('Настройки для общих параметров плагина.', 'textdomain') . '</p>';
}
function general_option_callback() {
$value = get_option('general_option', '');
echo '<input type="text" name="general_option" value="' . esc_attr($value) . '" />';
}
function advanced_section_callback() {
echo '<p>' . __('Настройки для продвинутых параметров плагина.', 'textdomain') . '</p>';
}
function advanced_option_callback() {
$value = get_option('advanced_option', '');
echo '<input type="text" name="advanced_option" value="' . esc_attr($value) . '" />';
}
Пример 2: Вывод настроек с несколькими секциями на вкладках
Часто на странице настроек могут быть разделы, которые организованы в виде вкладок. Это помогает структурировать настройки и сделать их удобными для пользователя.
<?php
add_action('admin_menu', 'plugin_tabs_settings_page');
function plugin_tabs_settings_page() {
add_options_page(
__('Настройки плагина с вкладками', 'textdomain'),
__('Вкладки настроек', 'textdomain'),
'manage_options',
'tabs_settings_page',
'tabs_settings_page_callback'
);
}
function tabs_settings_page_callback() {
$active_tab = isset($_GET['tab']) ? $_GET['tab'] : 'general';
?>
<div class="wrap">
<h1><?php _e('Настройки плагина с вкладками', 'textdomain'); ?></h1>
<h2 class="nav-tab-wrapper">
<a href="?page=tabs_settings_page&tab=general" class="nav-tab <?php echo $active_tab == 'general' ? 'nav-tab-active' : ''; ?>"><?php _e('Общие', 'textdomain'); ?></a>
<a href="?page=tabs_settings_page&tab=advanced" class="nav-tab <?php echo $active_tab == 'advanced' ? 'nav-tab-active' : ''; ?>"><?php _e('Продвинутые', 'textdomain'); ?></a>
</h2>
<form action="options.php" method="POST">
<?php
if ($active_tab == 'general') {
settings_fields('general_group');
do_settings_sections('tabs_general_settings');
} else {
settings_fields('advanced_group');
do_settings_sections('tabs_advanced_settings');
}
submit_button();
?>
</form>
</div>
<?php
}
add_action('admin_init', 'tabs_plugin_settings_init');
function tabs_plugin_settings_init() {
// Общие настройки
add_settings_section(
'tabs_general_section',
__('Общие настройки', 'textdomain'),
'tabs_general_section_callback',
'tabs_general_settings'
);
add_settings_field(
'general_option_1',
__('Опция 1', 'textdomain'),
'tabs_general_option_callback',
'tabs_general_settings',
'tabs_general_section'
);
register_setting('general_group', 'general_option_1');
// Продвинутые настройки
add_settings_section(
'tabs_advanced_section',
__('Продвинутые настройки', 'textdomain'),
'tabs_advanced_section_callback',
'tabs_advanced_settings'
);
add_settings_field(
'advanced_option_1',
__('Опция 2', 'textdomain'),
'tabs_advanced_option_callback',
'tabs_advanced_settings',
'tabs_advanced_section'
);
register_setting('advanced_group', 'advanced_option_1');
}
function tabs_general_section_callback() {
echo '<p>' . __('Настройки для общих параметров.', 'textdomain') . '</p>';
}
function tabs_general_option_callback() {
$value = get_option('general_option_1', '');
echo '<input type="text" name="general_option_1" value="' . esc_attr($value) . '" />';
}
function tabs_advanced_section_callback() {
echo '<p>' . __('Настройки для продвинутых параметров.', 'textdomain') . '</p>';
}
function tabs_advanced_option_callback() {
$value = get_option('advanced_option_1', '');
echo '<input type="text" name="advanced_option_1" value="' . esc_attr($value) . '" />';
}
Заключение
Функция do_settings_sections()
является мощным инструментом для создания страниц настроек в WordPress. Она автоматизирует вывод секций и полей, которые были зарегистрированы для определенной страницы, что упрощает работу разработчика.