Добавить раздел (добавить раздел настроек) на пользовательскую страницу (добавить страницу подменю)
У меня есть страница плагина, созданная с помощью add_submenu_page
, я хочу добавить туда новый раздел, но ничего не происходит:
add_submenu_page('parent', 'Foo', 'Foo', 'manage_options', 'foo-settings', 'anothercallback');
add_settings_section('foo-settings-section', 'Settings', 'acallback', 'foo-settings');
Как правильно использовать его на пользовательской странице? У вас есть полный пример?
2 answers
Функция add_settings_section()
просто регистрирует раздел формы с определенным слагом в WordPress. Чтобы получить раздел и все поля, которые вы добавили в него, для отображения на определенной странице меню, вам необходимо включить метод do_settings_sections($sections-slug)
в обратный вызов меню. Это, конечно, при условии, что вы используете API настроек, частью которого является add_settings_section
.
Пример:
function plugin_admin_init() {
//All callbacks must be valid names of functions, even if provided functions are blank
register_setting( 'option_group', 'option_name', 'sanitize_callback' );
add_settings_section( 'section_id', 'section_title', 'section_callback', 'section_page_type' );
add_settings_field( 'field_id', 'field_title', 'field_callback', 'section_page_type', 'section_id' );
}
add_action( 'admin_init', 'plugin_admin_init' );
function add_menus() {
add_menu_page( 'menu_page_title', 'menu_title', 'menu_capability', 'menu_slug', 'menu_callback');
add_submenu_page( 'menu_slug', 'submenu_page_title', 'submenu_title', 'submenu_capability', 'submenu_slug', 'submenu_callback' );
}
add_action( 'admin_menu', 'add_menus' );
function submenu_callback() {
?>
<div class='wrap'>
<h2>Settings</h2>
<form method='post' action='options.php'>
<?php
/* 'option_group' must match 'option_group' from register_setting call */
settings_fields( 'option_group' );
do_settings_sections( 'section_page_type' );
?>
<p class='submit'>
<input name='submit' type='submit' id='submit' class='button-primary' value='<?php _e("Save Changes") ?>' />
</p>
</form>
</div>
<?php
}
Я сделал все возможное, чтобы имена всех параметров были уникальными, поэтому вы должны иметь возможность различать их и отслеживать, где они уходят. API настроек очень точно определяет, что и куда нужно делать, поэтому убедитесь, что у вас все в порядке. Кроме того, имейте в виду, что я опустил все функции обратного вызова из этого примера, но на самом деле они необходимы.
Это ваша проблема, в вашем add_submenu_page()
обратном вызове:
settings_fields( 'option_group' );
do_settings_section( 'section_page_type' );
Для settings_fields()
:
- Вам нужно использовать параметр
$optiongroup
, который вы передалиregister_setting()
.
Для do_settings_sections()
:
- Функция является
do_settings_sections()
, нетdo_settings_section()
( примечание во множественном числе) - Вам нужно передать параметр
$pageid
, который вы передалиadd_submenu_page()
.
РЕДАКТИРОВАТЬ
Э-э, неважно. Я отвечал на чей-то ответ, который я неправильно истолковал как фактическую разметку функции обратного вызова. Ответы здесь могут быть применимы, а могут и не применяться; нам все равно нужно увидеть полный код, включая обратные вызовы.