Я решаю это следующим образом:
1- regester_setting()
идентификатор не должен совпадать с любым другим идентификатором, и это идентификатор, который вы должны использовать в функции обратного вызова.
2- вам не нужно использовать идентификатор add_setting_field()
в любом месте.
3 - поместить все разделы в одну группу параметров.
4 - страница внутри add_settings_section()
и add_setting_field()
должен соответствовать фрагменту страницы, который отображается с помощью add_menu_page()
или add_submenu_page()
.
, поэтому код теперь выглядит следующим образом:
добавление параметров на страницу администратора:
change : удаляются все параметры группы, только один сохраняется и добавляется к каждому regester_settings()
. изменен фрагмент страницы для соответствия странице в функциях обратного вызова add_settings_field()
.
add_submenu_page('top', 'top', 'top', 'manage_options', 'top-data', 'top_init' );
register_setting( 'top-data-group', 'yourLogo');
register_setting( 'top-data-group', 'card1_text');
register_setting( 'top-data-group', 'card4_text');
add_settings_section('top-options', 'Top Information', 'top_options', 'top-data' );
add_settings_section('card1', 'Card 1', 'card1_options', 'top-data' );
add_settings_section('card4', 'Card 4', 'top_options', 'top-data' );
add_settings_field('random3', 'Logo Image URL:', 'yourLogoImage_callback', 'top-data', 'top-options' );
add_settings_field('crandom1', 'card 1 text:', 'card1_text_callback', 'top-data', 'card1' );
add_settings_field('random2', 'card 4 text:', 'card4_text_callback', 'top-data', 'card4' );
:
change: изменен get_options()
и name=
свойства для соответствия идентификаторам на regester_settings()
function card1_text_callback (){
$preText = esc_attr( get_option('card1_text'));
echo ' <input type="text" name="card1_text" placeholder="card text" size="50" value="'.$preText. '" > ';
}
function card4_text_callback (){
$preText = esc_attr( get_option('card4_text'));
echo ' <input type="text" name="card4_text" placeholder="card text" size="50" value="'.$preText. '" > ';
}
function yourLogoImage_callback (){
$preText = esc_attr( get_option('yourLogo'));
echo ' <input type="text" name="yourLogoImage" placeholder="your Logo Image URL" size="50" value="'.$preText. '" > <p> use external or internal image url , preferred (300 * 50 px) </p>' ;
}
страница формы:
изменить: удалить каждый параметр группы, только один сохраненный.
<h1> Top Section </h1>
<?php settings_errors(); ?>
<form action="options.php" method="post" >
<?php
settings_fields('top-data-group');
do_settings_sections('top-data');
submit_button('save', 'primary sub-button', 'submit', true);
?>
</form>